Ответ 1
Полные текстовые индексы - это ответ.
Альтернатива бедному двоюродному брату -
'.' + column + '.' LIKE '%[^a-z]pit[^a-z]%'
FYI, если вы не используете сопоставление _CS, нет необходимости в a-zA-Z
У кого-нибудь есть шаблон LIKE
, который соответствует только целым словам?
Он должен учитывать пробелы, знаки препинания и начало/конец строки в качестве границ слов.
Я не использую полный текстовый поиск SQL, поскольку он недоступен. Я не думаю, что это было бы необходимо для простого поиска по ключевым словам, когда LIKE
должен иметь возможность сделать трюк. Однако, если кто-либо проверил эффективность поиска в полнотекстовом поиске по шаблонам LIKE
, мне было бы интересно услышать.
Я получил его на этом этапе, но он не соответствует началу/концу строки как границе слова.
where DealTitle like '%[^a-zA-Z]pit[^a-zA-Z]%'
Я хочу, чтобы это соответствовало "яме", но не "плевало" в предложении или как одно слово.
например. DealTitle
может содержать "яму отчаяния" или "яма вашего ума" или "яму" или "яму". или "яма!" или просто "яма".
Полные текстовые индексы - это ответ.
Альтернатива бедному двоюродному брату -
'.' + column + '.' LIKE '%[^a-z]pit[^a-z]%'
FYI, если вы не используете сопоставление _CS, нет необходимости в a-zA-Z
Я думаю, что рекомендуемые шаблоны исключают слова, у которых нет символа в начале или в конце. Я бы использовал следующие дополнительные критерии.
where DealTitle like '%[^a-z]pit[^a-z]%' OR
DealTitle like 'pit[^a-z]%' OR
DealTitle like '%[^a-z]pit'
Надеюсь, это поможет вам, ребята!
Другая простая альтернатива:
WHERE DealTitle like '%[^a-z]pit[^a-z]%' OR
DealTitle like '[^a-z]pit[^a-z]%' OR
DealTitle like '%[^a-z]pit[^a-z]'
Это хорошая тема, и я хочу дополнить это кому-то, как нужно найти какое-то слово в некоторой строке, передавая это как элемент запроса.
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
, чтобы отфильтровать это с помощью некоторого слова.
Окружите вашу строку пробелами и создайте тестовый столбец следующим образом:
SELECT t.DealTitle
FROM yourtable t
CROSS APPLY (SELECT testDeal = ' ' + ISNULL(t.DealTitle,'') + ' ') fx1
WHERE fx1.testDeal LIKE '%[^a-z]pit[^a-z]%'
Вы можете выполнить поиск всей строки в SQL:
select * from YourTable where col1 like '%TheWord%'
Затем вы можете отфильтровать сайт клиента возвращенных строк, добавив дополнительное условие, что оно должно быть целым словом. Например, если он соответствует регулярному выражению:
\bTheWord\b
Другой вариант - использовать функцию CLR, доступную в SQL Server 2005 и выше. Это позволит вам искать сервер регулярных выражений. Эта MSDN artcile содержит сведения о том, как настроить функцию dbo.RegexMatch
.
Попробуйте использовать charindex
чтобы найти соответствие:
Select *
from table
where charindex( 'Whole word to be searched', columnname) > 0