Obtenez le nombre exact de correspondances dans le champ de texte MySQL
P粉493534105
P粉493534105 2023-09-09 10:37:09
0
1
555

J'ai une table MySql avec un champ de texte.

Le champ de texte sera rempli avec une séquence aléatoire similaire à la suivante (peut être n'importe quelle valeur entière) :

14,4,24,20,34,2

34,67,4,98,64

Aucune virgule de début ou de fin dans les chaînes (valeurs de champ de texte).

Par exemple, je souhaite compter le nombre total d'occurrences de seulement « 4 ».

Une requête sur ces deux lignes devrait renvoyer 2 au lieu de 7.

Je ne sais pas comment rédiger une requête comme celle-ci.

Merci

P粉493534105
P粉493534105

répondre à tous (1)
P粉807471604

Pour MySQL 8.X

Vous pouvez utiliserREGEXP_REPLACEpour trouver les 4, les supprimer de la chaîne et calculer la différence de longueur :

SELECT LENGTH(vals) - LENGTH(REGEXP_REPLACE(vals, '(?<=^|,)4(?=$|,)', '')) FROM T;

Cela renverra le nombre de "4" dans chaque ligne, et vous pourrez ensuite tous les additionner :

SELECT SUM(LENGTH(vals) - LENGTH(REGEXP_REPLACE(vals, '(?<=^|,)4(?=$|,)', ''))) FROM T;

Vous pouvez également utiliserASpour renommer ces valeurs.

Explication des expressions régulières

(?<=^|,)4(?=$|,)recherche « 4 » qui répond aux critères suivants :

  • avant la virgule ou le début de la chaîne
  • Après la virgule ou la fin de la chaîne

Pour les anciennes versions de MySQL

La requête est très moche, mais vous pouvez utiliser ceci :

SELECT vals, LENGTH(Replace(Replace(Concat(',', vals, ','), ',4,', ',_,'), ',4,', ',_,')) - LENGTH(Replace(Replace(Replace(Concat(',', vals, ','), ',4,', ',_,'), ',4,', ',_,'), "_", "")) AS NB4 FROM test_table;

Cela commence par remplacer toutes les occurrences de "4" par un trait de soulignement (_) (par exemple, ne pas remplacer 4 sur 54). Il calcule ensuite la longueur de la chaîne avec ces traits de soulignement moins la longueur de la chaîne sans traits de soulignement, qui correspond au nombre de « 4 » dans votre liste.

Pourquoi est-il autant utiliséREPLACE?

En testant la requête, j'ai découvert que la fonctionREPLACE函数的行为与我们期望的不同。以这个例子为例:4,4,4,4,4,如果使用单个Replace,我们期望它返回_,_,_,_,_。然而,它会原地替换逗号,如果逗号“匹配”两次,它不会计算第二次,这就是为什么需要2个REPLACE(..., ",4,", ",_,")de MySQL se comportait différemment de ce à quoi nous nous attendions. En prenant cet exemple :4,4,4,4,4, si un seul remplacement est utilisé, nous nous attendons à ce qu'il renvoie_,_,_,_,_. Cependant, il remplace la virgule en place, et si la virgule "correspond" deux fois, elle ne compte pas la deuxième fois, c'est pourquoi 2REPLACE(..., ",4,", ",_, sont nécessaires ").

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!