2009-12-08 2 views
139

Ist es möglich, LIKE und IN in einer SQL Server-Abfrage zu kombinieren?Kombination "LIKE" und "IN" für SQL Server

So, dass diese Abfrage

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

findet jeder dieser möglichen Übereinstimmungen:

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

etc ...

+0

Wie füge ich jetzt eine Antwort hinzu? – Cloud

+0

@Cloud Sie können die [verknüpfte Frage] beantworten (https://stackoverflow.com/questions/3014940/is-there-a-combination-of-like-and-in-in-sql), wenn Sie neue Eingabe haben. Dieser ist ein Duplikat. –

Antwort

156

effektiv, die IN-Anweisung eine Reihe von OR-Anweisungen erstellt ... so

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

effektiv

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

Und leider, das ist der Weg Sie nehmen müssen, um mit Ihrem LIKE Aussagen

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

ist dies die einzige verfügbare Syntax? – shaffooo

+0

Nur eine Anmerkung: die letzte Abfrage funktioniert auch in Oracle (11g) – Abrar

+0

Ich suchte nach Regex Beispiel in der wie, aber das wird für jetzt tun! –

5

Sie müssen mehrere Klauseln LIKE durch ODER verbunden.

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

NOOOOOOO. Was ist, wenn Dutzende von möglichen Werten? es ist schrecklich ... – Faruz

+0

Das ist Leben? Die Frage ist, ob MS SQL diese Syntax unterstützt. Es tut nicht. Es ist schwer, über eine bessere Lösung zu spekulieren, ohne das Problem wirklich zu kennen. Die Volltextsuche könnte eine Option sein, worauf Mitch hingewiesen hat. Es kann auch wünschenswert sein, eine gespeicherte Prozedur zu schreiben (beispielsweise C#, die fortgeschrittenere Textverarbeitungsfähigkeiten aufweist). –

1

Nein, MSSQL erlaubt keine solche Abfragen. Sie sollten verwenden col LIKE '...' OR col LIKE '...' usw.

4

Nein, haben Sie OR verwenden, um Ihre LIKE Aussagen zu kombinieren:

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

Haben Sie bei Full-Text Search geschaut?

85

Eine andere Möglichkeit wäre, etwas zu verwenden, wie diese

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: Das ist woran ich gedacht habe. – shahkalpesh

+8

Dies ist der Geist der Frage am nächsten, so +1 –

+0

Ja das ist die Antwort, die ich suchte Vielen Dank –

123

Ich weiß, das ist alt, aber ich gehen, um eine Art von Lösung arbeiten

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

Sie können es erweitern weiter mit where-Klausel etc Ich antwortete Ursache nur das ist, was suchte und musste Finde einen Weg, es zu tun

+8

Ausgezeichnete Lösung, dies sollte als die Antwort markiert werden. –

+6

@ lloydz1 dies ist jedoch nicht die ursprüngliche Frage, die eine Spalte von Werten erstellt im laufenden Betrieb hat. Sie tun dies an zwei Tabellen. – Riz

+0

genial! thx: :) –