Mysql
 sql >> Datenbank >  >> RDS >> Mysql

? LIKE (Spalte || '%')

Die Abfrage:

SELECT * FROM table WHERE ? LIKE (col || '%');

kann umgeschrieben werden als (Postgres und MySQL):

SELECT * FROM table WHERE col = left(?, length(col));

Wie kommentiert, sollte das erste Formular auch funktionieren. Es kann jedoch schwierig sein, weil Zeichen mit besonderer Bedeutung für LIKE (mindestens _%\ ) in der Spalte müssten entkommen. Soll es sowohl mit MySQL als auch mit Postgres funktionieren, müssen Sie in beiden Implementierungen Sonderzeichen beachten. Die 2. Form ist also viel weniger fehleranfällig aus Prinzip.

Leistung

Keine dieser Abfragen kann einen Index für col verwenden , beide sind nicht sargable . Das Problem kann neu bewertet werden, indem alle möglichen Präfixe für das angegebene Suchmuster ? gefunden werden , die auf ähnliche Weise wie in dieser verwandten Antwort (für Postgres) auf dba.SE optimiert werden kann: