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

Recherche MYSQL REGEXP dans la chaîne JSON

Eh bien, c'est assez facile à déboguer :

SELECT '"listeListeOuiNon":"2"' REGEXP BINARY '"listeListeOuiNon":".*1.*"'

renvoie 0

SELECT '"listeListeOuiNon":"1"' REGEXP BINARY '"listeListeOuiNon":".*1.*"'

renvoie 1

SELECT '"listeListeOuiNon":"1,2"' REGEXP BINARY '"listeListeOuiNon":".*1.*"'

renvoie 1

Donc, quelque chose ne va pas à vos côtés... parce qu'il ne pouvait tout simplement pas renvoyer les lignes où le corps est égal à "listeListeOuiNon":"2" . Mais il est possible que ce corps ait plusieurs de ces déclarations, quelque chose comme :

body => '"listeListeOuiNon":"1,2", "listeListeOuiNon":"2"'

Vous devez donc modifier votre regexp :

'^"listeListeOuiNon":".*1.*"$'

Eh bien, alors vous devez modifier votre requête :

SELECT DISTINCT tag, body FROM pages WHERE (body REGEXP BINARY '"listeListeOuiNon":".*1.*"') AND NOT (body REGEXP BINARY '"listeListeOuiNon":"2"')