У меня есть код sql, но он не работает.
Он должен выбирать лучшее совпадение на основе частоты совпадений полных слов, но вытаскивает неправильную строку. Порядок слов не имеет значения.
Например, скажем @filter = "flower Doe"
, и у меня есть MYDBTitle, например:
1: hello Doe John flower
2: wildflower test
Было выбрано событие второй строки, хотя цветок не является отдельным word и первая строка имеют два совпадения.
Есть ли лучший способ сделать это без XML? Может быть, с Substring, Charindex и LEN?
BEGIN
SET @Split = ' '
SELECT @X = CONVERT(xml,' <root> <s>' + REPLACE(@filter,@Split,'</s> <s>') + '</s> </root> ')
;with cte1 as (
SELECT SearchItems = '%'+T.c.value('.','varchar(20)')+'%'
FROM @X.nodes('/root/s') T(c)
)
SELECT Top 1 MYDB.*
FROM MYDB WITH(NOLOCK)
INNER JOIN cte1 on MYDB.MYDBTitle like SearchItems
AND MYDB.Category IS NOT NULL
END
У меня есть еще одна попытка, которая не работает без XML
http://sqlfiddle.com/#! 18 / e2d69 / 1