2009-12-08 102 views
139

是否可以將LIKEIN結合到SQL Server-Query中?爲SQL Server結合「LIKE」和「IN」

所以,這個查詢

SELECT * FROM table WHERE column LIKE IN ('Text%', 'Link%', 'Hello%', '%World%') 

發現任何這些可能的匹配:

Text, Textasd, Text hello, Link2, Linkomg, HelloWorld, ThatWorldBusiness 

等等

+0

現在我該如何添加答案? – Cloud 2017-10-23 09:31:00

+0

@雲如果你有新的輸入,你可以回答[鏈接的問題](https://stackoverflow.com/questions/3014940/is-there-a-combination-of-like-and-in-in-sql)。這一個是重複的。 – 2017-10-23 11:20:59

回答

156

實際上,在IN語句創建一個系列或聲明......所以

SELECT * FROM table WHERE column IN (1, 2, 3) 

實際上是

SELECT * FROM table WHERE column = 1 OR column = 2 OR column = 3 

可悲的是,這是你必須採取與您的路線LIKE語句

SELECT * FROM table 
WHERE column LIKE 'Text%' OR column LIKE 'Hello%' OR column LIKE 'That%' 
+0

這是唯一可用的語法嗎? – shaffooo 2015-04-05 15:38:19

+0

只是一個說明:最後的查詢也適用於oracle(11g) – Abrar 2016-02-02 15:51:17

+0

我正在尋找類似的正則表達式的例子,但這會做現在! – 2016-03-24 09:29:37

5

您需要通過OR連接的多個LIKE子句。

SELECT * FROM table WHERE 
column LIKE 'Text%' OR 
column LIKE 'Link%' OR 
column LIKE 'Hello%' OR 
column LIKE '%World%' OR 
+5

NOOOOOOO。如果有幾十個可能的值呢?這很可怕... – Faruz 2009-12-08 07:54:55

+0

這就是生活?問題是關於MS SQL是否支持該語法。它不是。如果沒有真正意識到問題的存在,就很難推測更好的解決方案。 Mitch指出,全文檢索可能是一種選擇。編寫存儲過程也是可取的(例如在C#中,它具有更高級的文本處理能力)。 – 2009-12-08 08:00:15

1

不,MSSQL不允許這樣的查詢。您應該使用col LIKE '...' OR col LIKE '...'

4

不,你將不得不使用ORLIKE語句組合:

SELECT 
    * 
FROM 
    table 
WHERE 
    column LIKE 'Text%' OR 
    column LIKE 'Link%' OR 
    column LIKE 'Hello%' OR 
    column LIKE '%World%' 

你看着Full-Text Search

85

另一種選擇是使用類似這樣的東西

SELECT * 
FROM table t INNER JOIN 
     (
      SELECT 'Text%' Col 
      UNION SELECT 'Link%' 
      UNION SELECT 'Hello%' 
      UNION SELECT '%World%' 
     ) List ON t.COLUMN LIKE List.Col 
+0

@astander:這就是我想到的。 – shahkalpesh 2009-12-08 08:11:17

+8

這是最接近問題的精神,所以+1 – 2014-04-22 13:05:37

+0

是的這是我正在尋找的答案 謝謝 – 2015-05-29 17:05:54

123

我知道這是舊的,但我走了樣的工作液

SELECT Tbla.* FROM Tbla 
INNER JOIN Tblb ON 
Tblb.col1 Like '%'+Tbla.Col2+'%' 

的您可以與您的where子句等進一步展開 我只回答事業,這是什麼一直在尋找,不得不找出一種做法

+8

優秀的解決方案,這應該被標記爲答案。 – 2015-03-13 15:23:27

+6

@ lloydz1這不是原來的問題,儘管它有一列動態創建的值。你在兩張桌子上做這個。 – Riz 2015-12-16 18:06:01

+0

太棒了! thx::) – 2016-01-28 11:36:14