如何检索单词文本搜索行。例如,如果将输入搜索为“水Bottel”,则需要类似“水肥皂Bottel”,“水牛奶Bottel”,“水铜Bottel”的输出。我知道如何使用LIKE运算符。
random
答案 0 :(得分:3)
您可以这样做:
DECLARE @SearchTerm VARCHAR(100) = 'water bottel'
SELECT *
FROM #SearchText
WHERE ProductName LIKE '%' + REPLACE(@SearchTerm, ' ', '%') + '%'
但是,如果您还需要返回包含短语bottel water
的行,则这些单词的顺序将意味着上面的命令不起作用。在这种情况下,您需要将查询分解为多个单词,例如:
SELECT *
FROM #SearchText
WHERE ProductName LIKE '%water%'
AND ProductName LIKE '%bottel%'
如果该表上有一个full text index,则可以使用CONTAINS
:
SELECT *
FROM #SearchText
WHERE CONTAINS(ProductName, '"water" AND "bottel"')
答案 1 :(得分:1)
您可以在空间上拆分数据,并搜索拆分后的单词是否与拆分后的产品名称匹配:
如果所有搜索到的单词都必须匹配:
SELECT *
FROM #SearchText st
WHERE ( SELECT COUNT(value)
FROM STRING_SPLIT('water Bottel', ' ') ) = ( SELECT COUNT(*)
FROM STRING_SPLIT(st.ProductName, ' ') AS sv
JOIN STRING_SPLIT('water Bottel', ' ') AS ss
ON sv.value = ss.value )
如果一个或多个单词必须匹配:
SELECT *
FROM #SearchText st
WHERE EXISTS ( SELECT 1
FROM STRING_SPLIT(st.ProductName, ' ') AS sv
JOIN STRING_SPLIT('water Bottel', ' ') AS ss
ON sv.value = ss.value )
注意:string_split
函数内置在SQL Server 2016中,如果使用较低版本,则可以搜索创建自定义实现。
答案 2 :(得分:0)
使用LIKE
运算符。
SELECT
*
FROM #SearchText
WHERE LOWER(ProductName) LIKE '%water%'
AND LOWER(ProductName) LIKE '%bottel%'
如果列/数据库/服务器的协作不区分大小写,则可以省略LOWER(...)
函数。