SQL Server 2008 множественная проблема "НРАВИТСЯ" - PullRequest
3 голосов
/ 01 сентября 2010

Я использую MS SQL 2008 и столкнулся с проблемой уже несколько дней.Мой параметр SP может содержать от одного до трех слов в строке (nvarchar), и мне нужно возвращать соответствующие LIKE %phrase% записи для каждого слова в строке.

Пример.Мой параметр:

"stack overflow"

Записи, которые должны быть возвращены:

miSTACKon
noOVERFLOWon
STACKit
poOWERFLOW
STACK
OWERFLOW

Я также рассмотрел FTS, но функция CONTAINS принимает только один подстановочный знак в конце (каждой) фразы

phrase*

Есть ли решение этой проблемы, кроме динамического SQL?

Ответы [ 2 ]

6 голосов
/ 01 сентября 2010

Начните с общего примера, а затем я смоделирую его с помощью "союза всех"

   select distinct Record from dbo.Records
     inner join dbo.Split('stack overflow', ' ') tokens 
       on records_table.Record like '%' + tokens.value + '%'

Итак, что я сделал ниже, я высмеял некоторые данные, которые являются "записями, а такжефиктивный возврат из функции dbo.Split, в основном таблицы varchars с символами 'stack' и 'overflow' на ''.

select distinct Name from (
 select 'stack' as Name
 union all
 select 'nope' as Name
 union all
 select ' stackoverflow' as Name
   ) records_table 
   inner join (
   select 'stack' as value
     union all
    select 'overflow' as value) tokens 
    on records_table.Name like '%' + tokens.value + '%'

Результаты:

stack
stackoverflow

Там нет ничегоСпециально для функции dbo.Split и существует множество примеров реализации ...

0 голосов
/ 01 сентября 2010

Вы можете передать «слова» с фиксированным символом разделителя (т. Е. «,», «|» И т. Д.), Который не нужен для любых возможных «слов» (которые вы поддерживаете), а затем проанализироватьэтот аргумент с табличной функцией, и, наконец, объединить набор слов с условием JOIN, похожим на LIKE '%' + word + '%'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...