2010-03-30 47 views
2

我願做這樣的事情,即,在子句中使用通配符在:使用類似語法的SQL IN語句?

SELECT * FROM mytable WHERE keywords IN ('%test%', '%testing%') 

這不是在SQL Server支持....有一些其他的方式來實現這一目標?

尋找比其他的東西:

SELECT * FROM mytable WHERE keywords like '%test%' or keywords like '%testing%' or..... 
+0

我認爲你的實際使用比較複雜,但是在你給出的例子中你只需要LIKE'%test%',因爲任何匹配'%testing%'的東西都會匹配'%test%'。另外,如果您可以控制數據庫結構,那麼最好將關鍵字的存儲規範化。 – 2010-03-30 21:40:31

+0

@larry lustig:我只是給出了一個玩具的例子...我想做一些複雜的事情..謝謝 – StackUnderflow 2010-03-30 21:54:17

回答

8

不,只有我能想到的是到一個臨時表中加入的,但那麼你必須消除重複行其他方式。

這樣的查詢是非常低效的,因爲它會無條件地進行表掃描。也許你應該看看分隔關鍵字或引入全文索引。

如果你想研究全文搜索,那麼當你評估Sql Server全文解決方案時,我建議你考慮一下像sphinx或lucene這樣的重量。

3
SELECT DISTINCT * 
FROM 
    mytable M 
    JOIN 
    (
    SELECT '%test%' AS pattern 
    UNION ALL SELECT '%testing%' 
    ... 
) foo ON M.keywords LIKE foo.Pattern 

可能是一個CTE或臨時表太

+0

@OMG小馬:絕對。衛生署! – gbn 2010-03-30 21:42:45

+0

性能說明,最好的情況下(1關鍵字)這將是原來的速度。最糟糕的情況是,由於'distinct'的不同,這取決於行寬會慢幾倍。 – 2010-03-30 21:47:35

+0

@Sam Saffron:沒有正確的文本搜索 – gbn 2010-03-30 21:50:43

0

您可以使用正則表達式來做到這一點。 在一個正則表達式中,您可以根據需要在一個表達式中定義多個模式。

MS SQL SERVER中有很多關於正則表達式匹配的文章。 我用RLIKEMySQL做正則表達式匹配。

我還附上了link1 & link2適用於MS SQL SERVER正則表達式匹配。