2013-04-19 3 views
6

Ich möchte viele LIKE-Bedingungen in meiner Abfrage verwenden. Ich konnte keine praktische Lösung finden. Ich habe CONTAINS versucht, aber es funktioniert nicht.Wie kann man viele LIKE-Bedingungen in SQL einfach verwenden?

Anstatt diese verwenden

where EIO.DigiAddress like '%[email protected]%' 
or EIO.DigiAddress like '%[email protected]%' 
or EIO.DigiAddress like '%[email protected]%' 

ich so etwas wie dieses verwenden möchten:

CONTAINS(EIO.DigiAddress,'%[email protected]%', '%[email protected]%', '%[email protected]%') 

ODER

EIO.DigiAddress IN ('%[email protected]%', '%[email protected]%', '%[email protected]%') 
+0

Ist es eine bestimmte Reihe von Strings wie diese, oder ein gemeinsames Format, wie eine E-Mail-Adresse? – LeonardChallis

+0

Warum verwenden Sie LIKE ''% abc @ abc.com%'' für die E-Mail-Adresse, die Sie definieren sollten, verwenden Sie einfach '=' abc @ abc.com'' – valex

+0

Wenn Sie nach gültigen E-Mail-Adressen suchen . Dann wird der letzte% nicht benötigt! – IndoKnight

Antwort

2

Ich sehe nicht, etwas falsch LIKE in Verwendung. Aber wenn Sie nicht mögen, dann mögen diese verwenden (MS SQLSERVER)

where PATINDEX('%[email protected]%', EIO.DigiAddress) >0 OR 
     PATINDEX('%[email protected]%', EIO.DigiAddress) >0 OR 
     PATINDEX('%[email protected]%', EIO.DigiAddress) >0 

Hinweis: Sie haben für PATINDEX relevante String-Funktion verwenden, abhängig von der Datenbank, die Sie verwenden.

+0

Besser noch CHARINDEX, weil es schneller in seinem Fall ist. – usr

+0

PATINDEX kann Platzhalterzeichen verwenden, CHARINDEX jedoch nicht. Bitte beachten Sie http://msdn.microsoft.com/en-us/library/ms190184(v=sql.90).aspx – IndoKnight

+0

Er verwendet nur Wildcards an den Enden. Es sieht so aus, als sei seine Absicht eine "contains" Stilsuche. – usr

5

Try this:

erstellen temporäre Tabelle:

CREATE TEMPORARY TABLE temp (
    alternate VARCHAR(20) 
); 

dann:

INSERT INTO temp 
VALUES ('%[email protected]%'), ('%[email protected]%'), ('%[email protected]%'); 

Select:

SELECT t.* 
FROM tbl t JOIN temp p ON (t.col LIKE p.alternate); 
+0

Verlangsamt das Erstellen einer temporären Tabelle die Abfrage? – cihata87

+0

@ cihata87 ich denke nein ..... –

1

Sie können diesen Witz tun h reguläre Ausdrücke:

where EIO.DigiAddress regexp '[a-c|e-g|g-i]{3}@{1}[a-c|e-g|g-i]{3}.com' 
Verwandte Themen