Я хотел бы знать после много поиска, как я сопоставил бы различные варианты ввода для одной строки SQL, используя стандартный TSQL.Вот сценарий:
В моей строке sql есть следующий текст: I love
Затем у меня есть следующие 3 входа, каждый из которых должен возвращать соответствие этой строке:
" Я хочу сказать вам, что мы все любим StackOverflow"
" Я Я полностью в love с StackOverflow "
" I действительно love StackOverflow "
Как видите, я выделил причинудля матча, чтобы понять, почему они совпадают.I
в I'm
тоже намеренно совпадают, поэтому было бы хорошо, если бы мы могли включить это в совпадения.
Я думал о разбиении входной строки, которую я сделал, используя следующий TSQL:
-- Create a space delimited string for testing
declare @str varchar(max)
select @str = 'I want to tell you we all love StackOverflow'
-- XML tag the string by replacing spaces with </x><x> tags
declare @xml xml
select @xml = cast('<x><![CDATA['+ replace(@str,' ',']]></x><x><![CDATA[') + ']]></x>' as xml)
-- Finally select values from nodes <x> and trim at the same time
select ltrim(rtrim(mynode.value('.[1]', 'nvarchar(12)'))) as Code
from (select @xml doc) xx
cross apply doc.nodes('/x') (mynode)
Это дает мне все слова в виде отдельных строк, но тогда я не могу понять, как выполнить запрос на их соответствие.
Поэтому любая помощь с этой точки или любые альтернативные способы сопоставления по мере необходимостибудет более чем признателен!
ОБНОВЛЕНИЕ:
@ freefaller указал мне маршрут RegEx и создал функцию, которую я смог продвинуть немного вперед,поэтому +1 @freefaller, однако теперь мне нужно знать, как заставить его просматривать все строки моей таблицы, а не жестко запрограммированный ввод «Я люблю». Теперь у меня есть следующие операторы выбора:
SELECT * FROM dbo.FindWordsInContext('i love','I want to tell you we all love StackOverflow',30)
SELECT * FROM dbo.FindWordsInContext('i love','I''m totally in love with StackOverflow',30)
SELECT * FROM dbo.FindWordsInContext('i love','I really love StackOverflow',30)
Вышеприведенное возвращает мне количество совпадений и совпадение контекста строки, поэтому первое выделенное выше возвращает:
Hits Context
1 ...I want to tell you we all love StackOv...
Итак, основываясь на фактетеперь у нас есть вышесказанное, может кто-нибудь сказать мне, как заставить эту функцию просматривать все строки на совпадения и затем возвращать строку / строки, которые имеют совпадение?