我的用户试图通过提供简单的文本字符串这样找到我的SQL数据库记录:SQL搜索以任意顺序
SCRAP 000000152 TMB-0000000025
这些值可以是任何顺序和任何可能排除。例如,他们可能会进入:
SCRAP
TMB-0000000025 SCRAP
000000152 SCRAP
SCRAP 000000152
TMB-0000000025 000000152
所有应该工作,包括相同的记录作为原本的搜索,但他们可能还包含其他记录,因为更少的列中使用比赛。
下面是使用结果的示例表:
DECLARE @search1 varchar(50) = 'SCRAP 000000152 TMB-0000000025'
DECLARE @search2 varchar(50) = 'SCRAP'
DECLARE @search3 varchar(50) = 'TMB-0000000025 SCRAP'
DECLARE @search4 varchar(50) = '000000152 SCRAP'
DECLARE @search5 varchar(50) = 'SCRAP 000000152'
DECLARE @search6 varchar(50) = 'TMB-0000000025 000000152'
DECLARE @table TABLE (WC varchar(20),WO varchar(20),PN varchar(20))
INSERT INTO @table
SELECT 'SCRAP','000000152','TMB-0000000025' UNION
SELECT 'SCRAP','000','121-0000121515' UNION
SELECT 'SM01','000000152','121-0000155' UNION
SELECT 'TH01','00','TMB-0000000025'
SELECT * FROM @table
一个额外的皱纹,用户不必进入000000152
,他们可以进入152
,它应该发现相同的结果。
我可以使用patindex,但它需要用户按照特定的顺序输入搜索词,或者对于我来说,有一个指数级更大的字符串来比较,因为我尝试将它们放入所有可能的排列中。
在SQL中执行此操作的最佳方法是什么?或者,这是否超出了SQL的功能?该表很可能拥有超过10,000条记录(对于某些情况甚至超过100,000条记录),因此查询必须高效。
使用lucene ..... – 2014-11-06 23:54:31
@MitchWheat,你是说在SQL中没有好的方法吗? – davids 2014-11-06 23:56:14
我在说,解决你的问题的最好方法是使用Lucene。你的问题指出:“做这件事的最好方法是什么?” – 2014-11-06 23:56:43