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

Откуда:
Сообщений: 30
Доброе время дня.
Server 2008
Задача в следующем. Есть таблица содержащая столбец с символными данными( строки с наименованием товара ). Нужно для вводимого слова, найти все варианты следующего за ним слова. Например список товров:

кирпич силикатный белый
кирпич силикатный серый
кирпич облицовочный гладкий
кирпич огнеупорный

Для слова "кирпич" должно вренуть "силикатный", "керамический", "огнеупорный" и т.д.
Далее если мы выбрали "кирпич силикатный", то должно вернуть "белый" и "серый".
Если это поможет, то для этой таблиы создан полнотекстовый поиск.

Если это уже было на форуме подскажите правлиное название для такой задачи, чтобы посмотреть решение.
22 июл 11, 10:26    [11010793]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Строку с "керамический" придумывать из головы?
22 июл 11, 10:28    [11010812]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
Gwa
Guest
like 'кирпич %'
22 июл 11, 10:34    [11010850]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
Strangers
Member [заблокирован]

Откуда: Україна
Сообщений: 2613
DECLARE @t table (ID int identity, Descript varchar(200))
DECLARE @text varchar(200)

INSERT INTO @t (Descript)
SELECT 'кирпич силикатный белый'
UNION SELECT 'кирпич силикатный серый'
UNION SELECT 'кирпич облицовочный гладкий'
UNION SELECT 'кирпич огнеупорный'

SET @text = 'кирпич'

SELECT ID, Descript, SUBSTRING(Descript, charindex(@text, Descript) + LEN(@text)+1, 1000)
FROM @t
WHERE Descript like @text + '%'
	or Descript like '%[,. ]' + @text + '%'
	
SET @text = 'кирпич силикатный'

SELECT ID, Descript, SUBSTRING(Descript, charindex(@text, Descript) + LEN(@text)+1, 1000)
FROM @t
WHERE Descript like @text + '%'
	or Descript like '%[,. ]' + @text + '%'	
	
22 июл 11, 10:54    [11010988]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
DMel
Member

Откуда:
Сообщений: 30
Strangers
DECLARE @t table (ID int identity, Descript varchar(200))
DECLARE @text varchar(200)

INSERT INTO @t (Descript)
SELECT 'кирпич силикатный белый'
UNION SELECT 'кирпич силикатный серый'
UNION SELECT 'кирпич облицовочный гладкий'
UNION SELECT 'кирпич огнеупорный'

SET @text = 'кирпич'

SELECT ID, Descript, SUBSTRING(Descript, charindex(@text, Descript) + LEN(@text)+1, 1000)
FROM @t
WHERE Descript like @text + '%'
	or Descript like '%[,. ]' + @text + '%'
	
SET @text = 'кирпич силикатный'

SELECT ID, Descript, SUBSTRING(Descript, charindex(@text, Descript) + LEN(@text)+1, 1000)
FROM @t
WHERE Descript like @text + '%'
	or Descript like '%[,. ]' + @text + '%'	
	


Нужно выбирать не остальное предложение, а только следующее одно слово
Еще не уточнил слово может быть и в середине предложения.
Например "укладка кирпич облицовочный за деньги" , для запроса "кирпич" выдать только "облицовочный"
10 авг 11, 15:04    [11098346]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
DMel
Member

Откуда:
Сообщений: 30
Gwa
like 'кирпич %'

искомое слово может и не быть первым, и выбрать нужно ОДНО слово сразу следующее за искомым
10 авг 11, 15:06    [11098364]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
DMel, и что именно у вас не получается?
10 авг 11, 15:10    [11098390]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Ладно, будет перевыполнение плана по бездельникам))).
DECLARE @t table (ID int identity, Descript varchar(200))
DECLARE @text varchar(200)

INSERT INTO @t (Descript)
SELECT 'кирпич силикатный белый'
UNION SELECT 'кирпич силикатный серый'
UNION SELECT 'кирпич облицовочный гладкий'
UNION SELECT 'кирпич огнеупорный'
UNION ALL SELECT 'укладка кирпич облицовочный за деньги'
UNION ALL SELECT 'тест'

SELECT t.Descript,LEFT(t.s,ISNULL(NULLIF(CHARINDEX(' ',t.s),0),LEN(t.s))) r
FROM (
SELECT Descript
, RIGHT(Descript,LEN(Descript)-(NULLIF(PATINDEX('%кирпич %', Descript),0)+6)) s
--, RIGHT(Descript,LEN(Descript)-ISNULL((NULLIF(PATINDEX('%кирпич %', Descript),0)+6),0)) s -- или так
FROM @t
) t
10 авг 11, 15:26    [11098537]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
DMel
Member

Откуда:
Сообщений: 30
kDnZP
Ладно, будет перевыполнение плана по бездельникам))).
DECLARE @t table (ID int identity, Descript varchar(200))
DECLARE @text varchar(200)

INSERT INTO @t (Descript)
SELECT 'кирпич силикатный белый'
UNION SELECT 'кирпич силикатный серый'
UNION SELECT 'кирпич облицовочный гладкий'
UNION SELECT 'кирпич огнеупорный'
UNION ALL SELECT 'укладка кирпич облицовочный за деньги'
UNION ALL SELECT 'тест'

SELECT t.Descript,LEFT(t.s,ISNULL(NULLIF(CHARINDEX(' ',t.s),0),LEN(t.s))) r
FROM (
SELECT Descript
, RIGHT(Descript,LEN(Descript)-(NULLIF(PATINDEX('%кирпич %', Descript),0)+6)) s
--, RIGHT(Descript,LEN(Descript)-ISNULL((NULLIF(PATINDEX('%кирпич %', Descript),0)+6),0)) s -- или так
FROM @t
) t


Спасибо kDnZP. Я не бездельник :) честно, в SQL не сильно еще разбираюсь, со временем научусь, обещаю )
10 авг 11, 15:36    [11098628]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
DMel
Member

Откуда:
Сообщений: 30
Мне интересно, почему никто не использовал никаким образом средства полнотекстового поиска, или там нет ничего подходящего?
Неужели модуль который кеширует все слова не может прдоставлять средства поиска сосдених слов например?
10 авг 11, 15:39    [11098654]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
Glory
Member

Откуда:
Сообщений: 104751
DMel
Неужели модуль который кеширует все слова не может прдоставлять средства поиска сосдених слов например?

Поиск - это от слова искать, а не от слов "выдели мне из строки подстроку"
10 авг 11, 15:44    [11098694]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
DMel, кстати, лучше написать так:
...
, LTRIM(RIGHT(Descript,LEN(Descript)-(NULLIF(PATINDEX('%кирпич %', Descript),0)+6))) s
...
а то мало ли, вдруг будет несколько подряд идущих пробелов.
10 авг 11, 15:50    [11098769]     Ответить | Цитировать Сообщить модератору
 Re: Выборка соседние слов  [new]
DMel
Member

Откуда:
Сообщений: 30
kDnZP
DMel, кстати, лучше написать так:
...
, LTRIM(RIGHT(Descript,LEN(Descript)-(NULLIF(PATINDEX('%кирпич %', Descript),0)+6))) s
...
а то мало ли, вдруг будет несколько подряд идущих пробелов.



Да, встретилось такое, спасибо еще раз огромное!!!
10 авг 11, 16:01    [11098902]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить