Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поиск шаблонов в строке и вывод найденного в представление  [new]
IvanVetrov
Member

Откуда: Брянск
Сообщений: 51
Доброе время суток!

Уважаемые специалисты, подскажите, как создать представление viPat вида:
String Alias
Около речки гулял Александр Александр
Саша пошёл на работу Александр
Гарик написал стих Игорь
У Игоря родился сын Игорь


Соответствие шаблонов firstName и псевдонимов alias находится в таблице tNames. Строки, содержащие искомые шаблоны, в таблице tStr.


USE [test]
GO
/****** Object:  Table [dbo].[tNames]    Script Date: 26.10.2014 9:57:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tNames](
	[firstName] [nvarchar](max) NOT NULL,
	[alias] [nvarchar](50) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
/****** Object:  Table [dbo].[tStr]    Script Date: 26.10.2014 9:57:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tStr](
	[str] [nvarchar](max) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
INSERT [dbo].[tNames] ([firstName], [alias]) VALUES (N'Александр', N'Александр')
INSERT [dbo].[tNames] ([firstName], [alias]) VALUES (N'Игорь', N'Игорь')
INSERT [dbo].[tNames] ([firstName], [alias]) VALUES (N'Саша', N'Александр')
INSERT [dbo].[tNames] ([firstName], [alias]) VALUES (N'Гарик', N'Игорь')
INSERT [dbo].[tStr] ([str]) VALUES (N'Около речки гулял Александр')
INSERT [dbo].[tStr] ([str]) VALUES (N'Саша пошёл на работу')
INSERT [dbo].[tStr] ([str]) VALUES (N'Гарик написал стих')
INSERT [dbo].[tStr] ([str]) VALUES (N'У Игоря родился сын')
26 окт 14, 11:00    [16760098]     Ответить | Цитировать Сообщить модератору
 Re: Поиск шаблонов в строке и вывод найденного в представление  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
А что с такой фразой
Около речки гулял Александр, мимо Саша прошел на работу.
26 окт 14, 11:14    [16760117]     Ответить | Цитировать Сообщить модератору
 Re: Поиск шаблонов в строке и вывод найденного в представление  [new]
IvanVetrov
Member

Откуда: Брянск
Сообщений: 51
angel_zar,

таких фраз не будет. Мне главное составить правильный и быстрый запрос, который будет просматривать поле tNames.firstNames и если в tStr.str есть хоть одно слово, то в столбец Alias выводить tNames.alias
26 окт 14, 11:25    [16760131]     Ответить | Цитировать Сообщить модератору
 Re: Поиск шаблонов в строке и вывод найденного в представление  [new]
nizamovich
Member

Откуда: Москва
Сообщений: 116
IvanVetrov,

предлагаю как вариант 2 таблицы
первая таблица string

String
Около речки гулял Александр
Саша пошёл на работу
Гарик написал стих
У Игоря родился сын


вторая names
name_1name_2
АлександрАлександр
СашаАлександр
ГарикИгорь
ИгорИгорь


Ну и для вьюшки написать запрос

select string, name2 from string as s join names as n on s.string like '%'+name1+'%'
26 окт 14, 12:47    [16760231]     Ответить | Цитировать Сообщить модератору
 Re: Поиск шаблонов в строке и вывод найденного в представление  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
IvanVetrov
[firstName] [nvarchar](max)
Придумайте, пожалуйста, пример имени длиной 1 миллиард символов
26 окт 14, 12:57    [16760241]     Ответить | Цитировать Сообщить модератору
 Re: Поиск шаблонов в строке и вывод найденного в представление  [new]
IvanVetrov
Member

Откуда: Брянск
Сообщений: 51
nizamovich,
Вы просто молодец!
Огромная благодарность!
26 окт 14, 13:33    [16760282]     Ответить | Цитировать Сообщить модератору
 Re: Поиск шаблонов в строке и вывод найденного в представление  [new]
IvanVetrov
Member

Откуда: Брянск
Сообщений: 51
iap, только для примера. В базе всегда указываю подходящее число.
26 окт 14, 13:35    [16760287]     Ответить | Цитировать Сообщить модератору
 Re: Поиск шаблонов в строке и вывод найденного в представление  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
nizamovich
IvanVetrov,

предлагаю как вариант 2 таблицы
первая таблица string

[spoiler]
String
Около речки гулял Александр
Саша пошёл на работу
Гарик написал стих
У Игоря родился сын


вторая names
name_1name_2
АлександрАлександр
СашаАлександр
ГарикИгорь
ИгорИгорь


Ну и для вьюшки написать запрос

select string, name2 from string as s join names as n on s.string like '%'+name1+'%'[/spoiler]

Красота будет на таблице хотя бы примерно к 1000000 записей
26 окт 14, 16:01    [16760716]     Ответить | Цитировать Сообщить модератору
 Re: Поиск шаблонов в строке и вывод найденного в представление  [new]
IvanVetrov
Member

Откуда: Брянск
Сообщений: 51
angel_zar, будут тормозить? Пока проверил на таблице строк 6800 записей и таблице шаблонов 40 записей - выполняется менее 4х секунд.
26 окт 14, 19:11    [16761189]     Ответить | Цитировать Сообщить модератору
 Re: Поиск шаблонов в строке и вывод найденного в представление  [new]
IvanVetrov
Member

Откуда: Брянск
Сообщений: 51
проверил на таблице в аксесе на 500000 строк, из которых содержащих шаблоны 76974. Даже в Аксесе на двухядерном старом компе довольно шустро выполняется.
26 окт 14, 19:36    [16761284]     Ответить | Цитировать Сообщить модератору
 Re: Поиск шаблонов в строке и вывод найденного в представление  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
IvanVetrov
angel_zar, будут тормозить? Пока проверил на таблице строк 6800 записей и таблице шаблонов 40 записей - выполняется менее 4х секунд.

Я бы лучше в момент вставки и модификации записей сразу подставлял псевдоним
29 окт 14, 08:21    [16770702]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить