我花了一整天的时间寻找答案,并且已经解决了这样一个事实,即在3种不同的搜索引擎变体之后它是不可能的。这是我的问题。我需要搜索打印机型号表。由于打印机型号没有标准化,因此模型的不同部分可能处于不同的顺序。
HP OfficeJet Pro 8715
HP OfficeJet 8715 Pro
两者显然是相同的打印机,但它们在我们和供应商之间的共享数据库中以两种方式出现。问题是,如果我搜索 HP OfficeJet Pro 8715 ,它应该返回 HP OfficeJet 8715 Pro ,但它不应该返回 HP OfficeJet Pro 8715dw 例如。
总之,单词可以是任何顺序,但单词必须完全匹配。
我已经将搜索字符串解析为#temp
表,以便每行都有一个单词,这就是我比较查找结果的方式。
INSERT INTO #results
SELECT Make, Model
FROM tDevices
WHERE ( Make LIKE '%' + @MAKE + '%' ) AND ( Model LIKE '%' + @MODEL + '%' ) AND ( Model LIKE '%' + @MODEL2 + '%' )
每个模型变量是模型中的另一个单词。这很好但返回 HP OfficeJet Pro 8715 以及 HP OfficeJet Pro 8715dw
这可能吗?
由于
答案 0 :(得分:0)
返回 8715dw ,因为%(任何运算符)允许它。
尝试不使用%s:
INSERT INTO #results
SELECT Make, Model
FROM tDevices
WHERE ( Make LIKE @MAKE ) AND ( Model LIKE @MODEL ) AND ( Model LIKE @MODEL2 )
更新(基于https://stackoverflow.com/a/14291100/510788):
SELECT * FROM
(SELECT Make, CONCAT(' ', REPLACE(Model,' ',' '), ' ') AS Model FROM tDevices) t
WHERE
Make LIKE '%hp%' AND (
Model LIKE '% 8715 %' OR
Model LIKE '% pro %' AND
(REPLACE(REPLACE(Model,
' 8715 ',''),
' pro ','')) = ''
)