2 votes

REGEXP dans MySQL Renvoie une valeur non désirée

J'ai un problème avec l'utilisation de REGEX dans Mysql.

J'ai une valeur oid dans la base de données comme ceci

id -> valeur

1.3.6.1.4.1 -> Valeur a

1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1 -> Valeur b

1.3.6.1.4.1.2499 -> Valeur c

Et mes objections sont 1. Obtenir un seul oid et une valeur avec l'oid spécifique que je mets dans la déclaration sql. 2. S'il n'y a pas de valeur spécifique, il faut inverser l'oid numéro par numéro jusqu'à ce qu'il trouve la nouvelle valeur.

Par exemple Si j'utilise [ select id from tablename where '1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1' REGEXP oid ] il devrait retourner seulement 1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1.1 mais le sql ci-dessus retournera tous les résultats

I [ select id from tablename where '1.3.6.1.4.1.24999999.5' REGEXP oid ] il devrait retourner 1.3.6.1.4.1 seulement mais il renvoie 1.3.6.1.4.1 et 1.3.6.1.4.1.2499

Si j'utilise select id from tablename where '1.3.6.1.4.1.2499.1.1.2.1.1.1.1.100' REGEXP oid il devrait retourner 1.3.6.1.4.1.2499 seulement mais il retourner tous les identifiants

Je ne suis pas vraiment familier avec ce REGEXP. Quelqu'un peut-il m'aider à résoudre ce problème ? Je vous remercie.

0voto

True Soft Points 4870

Avec MySQL, vous devez utiliser field REGEXP value comme ceci :

select id from tablename where oid REGEXP '1.3.6.1.4.1.2499.1.1.2.1.1.1.1.1'

. doit être échappé avec \
Et pour faire correspondre une ligne entière, utilisez ^ y $ :

select id from tablename where oid REGEXP '^1\.3\.6\.1\.4\.1\.2499\.1\.1\.2\.1\.1\.1\.1\.1$'

Je ne comprends pas pourquoi vous utilisez REGEXP lorsque vous pouvez sélectionner par LIKE parce que vous ne recherchez pas par une expression régulière.

0voto

Ben Doom Points 6581

Je ne pense pas que regex soit le bon outil pour ce travail.

Au lieu de cela, je bouclerais sur la chaîne d'entrée, en la traitant comme une liste délimitée par des points.

Comparez la liste avec oid. Si aucune correspondance n'est trouvée, supprimez le dernier élément de la liste. Répéter.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X