2009-12-08 10 views
139

È possibile combinare LIKE e IN in una query SQL Server?Combinazione di "LIKE" e "IN" per SQL Server

Quindi, che questa query

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

trova qualsiasi di queste possibili corrispondenze:

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

ecc ...

+0

Come posso aggiungere una risposta ora? – Cloud

+0

@Cloud Si può rispondere alla [domanda legata] (https://stackoverflow.com/questions/3014940/is-there-a-combination-of-like-and-in-in-sql) se si dispone di nuovo input. Questo è un duplicato. –

risposta

156

In effetti, la dichiarazione IN crea una serie di istruzioni OR ... così

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

è effettivamente

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

E purtroppo, questo è il percorso che dovrete prendere con la vostra LIKE statement

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

è questa l'unica sintassi disponibile? – shaffooo

+0

Solo una nota: l'ultima query funziona anche in Oracle (11g) – Abrar

+0

che cercavo per esempio regex all'interno simili, ma questo farà per ora! –

5

avete bisogno di più clausole COME collegati da OR.

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

NOOOOOOO. Cosa succede se dozzine di valori possibili? è terribile ... – Faruz

+0

Questa è la vita? La domanda riguarda se MS SQL supporta questa sintassi. Non è così. È difficile speculare su una soluzione migliore senza conoscere veramente il problema. La ricerca a tutto testo potrebbe essere un'opzione come Mitch ha sottolineato. Potrebbe anche essere desiderabile scrivere una stored procedure (ad esempio C#, che ha capacità di elaborazione del testo più avanzate). –

1

No, MSSQL non consente tali query. Si dovrebbe usare col LIKE '...' OR col LIKE '...' ecc

4

No, si dovrà utilizzare OR per combinare i tuoi LIKE dichiarazioni:

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

Hai guardato Full-Text Search?

85

Un'altra opzione sarebbe quella di utilizzare qualcosa come

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: Ecco quello che pensavo. – shahkalpesh

+8

Questo è il più vicino allo spirito della domanda, quindi +1 –

+0

Sì, questa è la risposta che stavo cercando Grazie –

123

So che questo è vecchio, ma io vado una sorta di soluzione di lavoro

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

è possibile espandere ulteriormente con il tuo clausola where ecc ho unica causa risposto a questo è quello che cercava e ha dovuto capire un modo di farlo

+8

Soluzione eccellente, questa dovrebbe essere contrassegnata come risposta. –

+6

@ lloydz1 questa non è la domanda originale, sebbene abbia una colonna di valori creata al volo. Lo stai facendo su due tavoli. – Riz

+0

fantastico! grazie: :) ​​ –