web-dev-qa-db-fra.com

Comment regex dans une requête MySQL

J'ai une tâche simple où je dois rechercher un enregistrement commençant par des caractères de chaîne et un chiffre après eux. Ce que j'essaye c'est

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[d]%')

Et

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA[0-9]%')

Mais les deux requêtes renvoient toujours un enregistrement null

trecord
-------
null

Où comme si j'exécutais la requête suivante

SELECT trecord FROM `tbl` WHERE (trecord LIKE 'ALA%')

il revient

trecord
-------
ALA0000
ALA0001
ALA0002

Cela signifie que j'ai des enregistrements qui commencent par ALA et suivis d'un chiffre,

EDIT

Je le fais en utilisant PHP MySQL et le moteur innodb pour être spécifique.

41
zzlalani

Je pense que vous pouvez utiliser REGEXP au lieu de LIKE

SELECT trecord FROM `tbl` WHERE (trecord REGEXP '^ALA[0-9]')
66
Wietze314

Dans mon cas (Oracle), c'est WHERE REGEXP_LIKE(column, 'regex.*'). Voir ici :

Fonction SQL

Description


REGEXP_LIKE

Cette fonction recherche un motif dans une colonne de caractères. Utilisez cette fonction dans la clause WHERE d'une requête pour renvoyer des lignes correspondant à l'expression régulière spécifiée.

...

REGEXP_REPLACE

Cette fonction recherche un motif dans une colonne de caractères et remplace chaque occurrence de ce motif par le motif que vous spécifiez.

...

REGEXP_INSTR

Cette fonction recherche dans une chaîne une occurrence donnée d'un modèle d'expression régulière. Vous spécifiez l'occurrence que vous souhaitez rechercher et la position de départ dans laquelle effectuer la recherche. Cette fonction renvoie un entier indiquant la position de la correspondance dans la chaîne.

...

REGEXP_SUBSTR

Cette fonction renvoie la sous-chaîne réelle correspondant au modèle d'expression régulière que vous spécifiez.

(Bien entendu, REGEXP_LIKE ne fait correspondre que les requêtes contenant la chaîne de recherche. Par conséquent, si vous souhaitez une correspondance complète, vous devrez utiliser '^$' pour un début (^) et fin ($) match, par exemple: '^regex.*$'.)

4
Andrew