我的用戶試圖通過提供簡單的文本字符串這樣找到我的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