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

Comment additionner une chaîne séparée par des virgules en SQL ?

Avec beaucoup d'efforts, vous pouvez le faire. Cependant, c'est vraiment une très, très mauvaise façon de stocker des données.

Dans l'esprit que nous devons parfois utiliser des données dont le format n'est pas sous notre contrôle :

select id,
       (substring_index(value, ',', 1) +
        substring_index(substring_index(concat(value, ',0'), ',', 2), ',', -1) +
        substring_index(substring_index(concat(value, ',0'), ',', 3), ',', -1) +
        substring_index(substring_index(concat(value, ',0'), ',', 4), ',', -1) +
        substring_index(substring_index(concat(value, ',0'), ',', 5), ',', -1)
       ) as thesum
from t;

L'appel imbriqué à substring_index() récupère la nième valeur de la chaîne. Le concat(value, ',0') est de gérer le cas où il y a moins de valeurs que d'expressions. Dans ce cas, le substring_index() imbriqué renverra la dernière valeur pour toute valeur de n supérieure au nombre d'éléments de la liste. Concaténer 0 à la liste garantit que cela n'affecte pas la somme.

Le SQL Fiddle est ici .