需要一些以下要求的帮助。将通过一个例子解释
产品名称:" AMOXICILLIN SUSP 250MG / 5ML 100ML "
客户要求就是他们搜索产品时
a)" amoxi "或" amo susp "或" amox susp "或" amo sus 250 100 "
b) 100 250 sus amo 或 amox susp
我们需要显示所有类似的产品名称,例如" amoxilin 10mg"或者" amoxilin 30mg"。基本上,如果产品名称太长,他将使用同一产品中不同单词中的少数字符搜索单词。有时甚至反向也应该像b点中提到的那样工作。寻找实现这一目标的投入。
谢谢。 Prathap。
答案 0 :(得分:0)
一种方法是将查询字符串分解为单个标记,将每个标记与数据匹配,计算已匹配的标记数,并仅返回与所有标记匹配的结果。
像这样:
DECLARE @QueryString NVARCHAR(200) = 'amo susp';
WITH data AS (
SELECT col = 'AMOXICILLIN SUSP 250MG/5ML 100ML' UNION ALL
SELECT col = 'Other product'
),
QueryTokens AS(
SELECT Token = X.n.value('.', 'nvarchar(200)')
FROM (SELECT CAST('<i>' + REPLACE(@QueryString, ' ', '</i><i>') + '</i>' AS XML)) AS C(n)
CROSS APPLY C.n.nodes('i') AS X(n)
),
NrOfTokens AS (
SELECT NrTokens = COUNT(1)
FROM QueryTokens
)
SELECT D.col
FROM data AS D
CROSS JOIN NrOfTokens AS NT
INNER JOIN QueryTokens AS QT
ON D.col LIKE QT.Token + '%'
OR D.col LIKE '% ' + QT.Token + '%'
GROUP BY D.col, NT.NrTokens
HAVING COUNT(1) = NT.NrTokens;
答案 1 :(得分:0)
尝试这样的事情:
SELECT ProductName
FROM TableName
WHERE CONTAINS (ProductName, '"AMO*" OR "SUS*" OR "250M*" OR "100*"' )