Совпадение ближайшей фразы в SQL - PullRequest
0 голосов
/ 09 мая 2009

Мне нужно написать запрос в t-sql или linq, который соответствует записям в БД, которые содержат большинство слов ввода пользователя.

exmaple: Поле nvarchar в БД: «Быстрая коричневая лиса перепрыгивает через ленивую собаку»

Ввод пользователя: "коричневая корова"

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

Дайте мне знать, если мне нужно предоставить больше примеров.

Ответы [ 2 ]

2 голосов
/ 09 мая 2009

Если вы используете T-SQL в среде MS SQL Server, то вам следует использовать Полнотекстовый поиск . Это дает вам скорость и не позволяет изобретать велосипед.

1 голос
/ 09 мая 2009

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

declare @searchStr nvarchar(100)
set @searchStr = 'brown fox'
selecT T.* from test T, dbo.fnc_SplitSTring(@searchStr,' ')
where   T.name like '%' + token + '%'


CREATE   FUNCTION [dbo].[fnc_SplitString]
(
@InString varchar(8000),
@Delim char(1)
)
RETURNS @Return table
(
Position int identity,
Token varchar(100) -- Maximum token size is 100 chars...
)
As
BEGIN
    Declare @CR varchar(1),
    @LF varchar(1)
    Set @CR = char(10)
    Set @LF = char(13)
    -- 
    If @InString is null return
    -- 
    Declare @Pos int
    Declare @Pattern char(3)
    Set @Pattern = '%' + @Delim + '%'
    -- 
    Declare @Token varchar(30)
    SELECT @InString = @InString + @Delim -- add trailing delimiter
    SELECT @Pos = PATINDEX(@Pattern, @InString)
    WHILE (@Pos <> 0) BEGIN
        SELECT @Token = ltrim(rtrim(SUBSTRING(@InString, 1, @Pos - 1)))
        Select @Token = replace(@Token, @CR, '')
        Select @Token = replace(@Token, @LF, '')
        Insert @Return Values (@Token)
        SELECT @InString = STUFF(@InString, 1, PATINDEX(@Pattern, @InString),'')
        SELECT @Pos = PATINDEX(@Pattern, @InString)
    END
-- 
return
-- 
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...