我有这个sql代码,但它不工作。
它应该根据全词匹配的频率提取最佳匹配,但它提取了错误的行。语序应该无关紧要。
例如说@filter=“flower doe”
我的名字是这样的:
1: hello Doe John flower
2: wildflower test
虽然flower不是一个单独的词,而且第一行有两个匹配项,但它选择了第二行事件。
没有xml还有更好的方法吗?也许用子串,查林德克斯和伦?
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号
1条答案
按热度按时间k75qkfdt1#
感谢所有看过这个的人。通过实现全文检索解决了这个问题。