Подтвердить что ты не робот

Найдите "полное совпадение слов" с шаблоном SQL Server LIKE

У кого-нибудь есть шаблон LIKE, который соответствует только целым словам?

Он должен учитывать пробелы, знаки препинания и начало/конец строки в качестве границ слов.

Я не использую полный текстовый поиск SQL, поскольку он недоступен. Я не думаю, что это было бы необходимо для простого поиска по ключевым словам, когда LIKE должен иметь возможность сделать трюк. Однако, если кто-либо проверил эффективность поиска в полнотекстовом поиске по шаблонам LIKE, мне было бы интересно услышать.

Edit:

Я получил его на этом этапе, но он не соответствует началу/концу строки как границе слова.

where DealTitle like '%[^a-zA-Z]pit[^a-zA-Z]%' 

Я хочу, чтобы это соответствовало "яме", но не "плевало" в предложении или как одно слово.

например. DealTitle может содержать "яму отчаяния" или "яма вашего ума" или "яму" или "яму". или "яма!" или просто "яма".

4b9b3361

Ответ 1

Полные текстовые индексы - это ответ.

Альтернатива бедному двоюродному брату -

'.' + column + '.' LIKE '%[^a-z]pit[^a-z]%'

FYI, если вы не используете сопоставление _CS, нет необходимости в a-zA-Z

Ответ 2

Я думаю, что рекомендуемые шаблоны исключают слова, у которых нет символа в начале или в конце. Я бы использовал следующие дополнительные критерии.

where DealTitle like '%[^a-z]pit[^a-z]%' OR 
  DealTitle like 'pit[^a-z]%' OR 
  DealTitle like '%[^a-z]pit'

Надеюсь, это поможет вам, ребята!

Ответ 3

Другая простая альтернатива:

WHERE DealTitle like '%[^a-z]pit[^a-z]%' OR 
      DealTitle like '[^a-z]pit[^a-z]%' OR 
      DealTitle like '%[^a-z]pit[^a-z]'

Ответ 4

Это хорошая тема, и я хочу дополнить это кому-то, как нужно найти какое-то слово в некоторой строке, передавая это как элемент запроса.

SELECT 
    ST.WORD, ND.TEXT_STRING
FROM 
    [ST_TABLE] ST
LEFT JOIN 
    [ND_TABLE] ND ON ND.TEXT_STRING LIKE '%[^a-z]' + ST.WORD + '[^a-z]%'
WHERE 
    ST.WORD = 'STACK_OVERFLOW' -- OPTIONAL

С помощью этого вы можете перечислить все случаи ST.WORD в ND.TEXT_STRING, и вы можете использовать клаузулу WHERE, чтобы отфильтровать это с помощью некоторого слова.

Ответ 5

Окружите вашу строку пробелами и создайте тестовый столбец следующим образом:

 SELECT t.DealTitle 
 FROM yourtable t
 CROSS APPLY (SELECT testDeal = ' ' + ISNULL(t.DealTitle,'') + ' ') fx1
 WHERE fx1.testDeal LIKE '%[^a-z]pit[^a-z]%'

Ответ 6

Вы можете выполнить поиск всей строки в SQL:

select * from YourTable where col1 like '%TheWord%'

Затем вы можете отфильтровать сайт клиента возвращенных строк, добавив дополнительное условие, что оно должно быть целым словом. Например, если он соответствует регулярному выражению:

\bTheWord\b

Другой вариант - использовать функцию CLR, доступную в SQL Server 2005 и выше. Это позволит вам искать сервер регулярных выражений. Эта MSDN artcile содержит сведения о том, как настроить функцию dbo.RegexMatch.

Ответ 7

Попробуйте использовать charindex чтобы найти соответствие:

Select * 
from table 
where charindex( 'Whole word to be searched', columnname) > 0