sql >> Database teknologi >  >> RDS >> Mysql

Hvordan summerer man en kommasepareret streng i SQL?

Med stor indsats kan du gøre dette. Virkelig, men dette er en meget, meget dårlig måde at gemme data på.

I den ånd, at vi nogle gange er nødt til at bruge data, hvis format ikke er under vores kontrol:

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;

Den indlejrede kaldet til substring_index() hent den n'te værdi i strengen. concat(value, ',0') er at håndtere det tilfælde, hvor der er færre værdier end udtryk. I dette tilfælde, den indlejrede substring_index() returnerer den sidste værdi for enhver værdi på n større end antallet af elementer på listen. Sammenkædning af 0 til listen sikrer, at dette ikke påvirker summen.

SQL Fiddle er her .



  1. Viser billede fra PostgreSQL-database, bytea

  2. Mulige konsekvenser af at øge varchar-længden i MySql?

  3. Skjulte funktioner i PostgreSQL

  4. MySQL:Opdater alle rækker i en tabel, der matcher resultaterne af en anden forespørgsel