2013-01-15 1 views
0

J'ai plusieurs années ID dans un seul champ comme celui-ciComment puis-je correspondre à une chaîne numérique exacte dans MySQL

field_name 
+----------+ 
12345|34456|43564 

Maintenant, ce que je voulais est d'obtenir la ligne si elle correspond à même un seul numéro parfaitement si je cherchais un peu et je trouve cela et utilisé dans ma requête, mais il a échoué

SELECT field_name FROM tbl_name WHERE field_name REGEXP '[[:<:]]34456[[:>:]]'; 

J'utilisé ce une barre oblique inverse et cela a fonctionné,

SELECT field_name FROM tbl_name WHERE field_name REGEXP '[[:<:]]34456\[[:>:]]'; 

alors est-ce parfait ou je me trompe quelque part? J'ai besoin d'une correspondance exacte, je ne veux pas que je cherche 34456 et si 34457 est là et cela prend, je veux EXACT match, et je ne peux pas utiliser WHERE ici

Répondre

1

Eh bien, aucune solution ne va être "parfait" si vous stockez des ID comme ça :)

MySQL a une fonction appelée FIND_IN_SET qui peut être utile pour ce type de tâche, mais il suppose que votre liste est délimitée par des virgules. Vous devrez donc remplacer les tuyaux par des virgules afin d'utiliser cette fonction.

Quelque chose comme cela devrait fonctionner:

SELECT field_name 
FROM tbl_name 
WHERE find_in_set('34456',replace(field_name,'|',',')) > 0; 
+0

que je peux obtenir le 1 exact? et s'il vous plaît pouvez-vous m'expliquer l'utilisation de regex, mais si cela fonctionne que je ne vais pas pour regex –

+0

Oui, cela retournera seulement des correspondances exactes, et devrait être plus lisible pour vous si vous n'êtes pas à l'aise avec REGEXP. Essaye le! –

Questions connexes