2016-11-09 2 views
0

Was ist der beste Weg, dies zu tun?mysql wo IN-Anweisung mit Regex?

select * from myTable where hostname IN ('host1-%', 'host2-%', 'host3-%') 

wo Hostnamen manchmal als Fully Qualified Domain oder einfach wie nur host1

+1

WHERE Hostname LIKE 'host1-%' OR Hostname LIKE 'host2-%' OR Hostname LIKE 'host3 -%' ' – RiggsFolly

Antwort

2

dies tun Kommt zurück, was Sie

select * from myTable where hostname REGEXP '^host[123]-' 

oder

select * from myTable where hostname REGEXP '^host[1-3]-' 
+1

Sie müssen'^'Anker am Anfang, Sie dies nicht tun brauche '. *' am Ende. – Barmar

+0

Danke für die Entdeckung, dass - verpasste die^on cut & paste & automatisch konvertiert% zu. * Ohne zu denken, dass es nicht benötigt wird. – PaulF

1

hinzufügen möchten PaulF Antwort, müssen Sie möglicherweise LIKE in Verbindung mitverwenden, z.B.

SELECT * FROM myTable 
WHERE hostname LIKE 'host%' AND hostname REGEXP '^host[1-3]-' 

Dies liegt daran, MySQL, wenn REGEXP Verarbeitung nicht die Verwendung von Indizes machen, aber es wird es für LIKE verwenden, wenn das Muster ein konstantes Präfix hat. Wenn Sie also einen Index für die hostname-Spalte haben, wird dieser den Index verwenden, um auf hostXXX einzugrenzen, und dann nur einen regulären Ausdruck für diese Zeilen durchführen müssen.

Siehe Mysql optimization for REGEXP