2013-04-19 11 views
6

Chcę używać wielu warunków LIKE w moim zapytaniu. Nie mogłem znaleźć praktycznego rozwiązania. Próbowałem CONTAINS, ale to nie działa.jak łatwo korzystać z wielu warunków LIKE w SQL?

Zamiast tego

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

chcę użyć coś takiego:

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

LUB

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

Czy jest to określony zestaw takich ciągów znaków, czy też wspólny format, taki jak adres e-mail? – LeonardChallis

+0

Dlaczego używasz LIKE ''% abc @ abc.com% ''dla adresu e-mail, który jest zdefiniowany, powinieneś użyć' =' abc @ abc.com'' – valex

+0

Jeśli twoim celem jest sprawdzenie poprawności adresów e-mail . Wtedy ostatni% nie jest potrzebny! – IndoKnight

Odpowiedz

2

nie widzę niczego złego w stosowaniu podobnych. Ale jeśli nie lubisz jak wtedy użyć tego (dla MS SQLServer)

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

Uwaga: Musisz użyć odpowiedniej funkcji ciągów dla PATINDEX w zależności od używanej bazy danych.

+0

Jeszcze lepiej CHARINDEX, ponieważ jest szybszy w jego przypadku. – usr

+0

PATINDEX może używać symboli wieloznacznych, ale CHARINDEX nie może tego zrobić. Odwołaj się do http://msdn.microsoft.com/en-us/library/ms190184(v=sql.90).aspx – IndoKnight

+0

Używa tylko symboli wieloznacznych na końcach. Wygląda na to, że jego intencją jest wyszukiwanie stylu "zawiera". – usr

5

Spróbuj tego:

Utwórz tabelę temp:

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

następnie:

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

Wybierz:

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

Czy tworzenie tabeli tymczasowej spowalnia zapytanie? – cihata87

+0

@ Cihata87 chyba nie ..... –

1

Można to zrobić dowcip h wyrażeń regularnych:

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