Mysql
 sql >> Base de données >  >> RDS >> Mysql

? COMME (colonne || '%')

La requête :

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

peut être réécrit comme (Postgres et MySQL):

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

Comme indiqué, le premier formulaire devrait également fonctionner. Cela peut cependant être délicat, car les caractères ayant une signification particulière pour LIKE (au moins _%\ ) dans la colonne il faudrait s'enfuir. Si vous voulez qu'il fonctionne à la fois avec MySQL et Postgres, vous devrez respecter les caractères spéciaux dans les deux implémentations. Ainsi, le 2e formulaire est beaucoup moins sujet aux erreurs sur principal.

Performances

Aucune de ces requêtes ne peut utiliser un index sur col , les deux ne sont pas sargable . Le problème peut être réévalué en trouvant tous les préfixes possibles pour le modèle de recherche donné ? , qui peut être optimisé de la même manière que dans cette réponse connexe (pour Postgres) sur dba.SE :