sql >> Databasteknik >  >> RDS >> Mysql

Hur summerar man en kommaseparerad sträng i SQL?

Med stor ansträngning kan du göra detta. Men egentligen är detta ett väldigt, väldigt dåligt sätt att lagra data.

I andan att vi ibland måste använda data vars format inte är under vår kontroll:

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 kapslade anropade till substring_index() hämta det n:te värdet i strängen. concat(value, ',0') är att hantera fallet där det finns färre värden än uttryck. I det här fallet, den kapslade substring_index() returnerar det sista värdet för ett värde på n större än antalet objekt i listan. Sammanfogar 0 till listan säkerställer att detta inte påverkar summan.

SQL Fiddle finns här .



  1. Oracle Database Testing Challenge - Jämför schemadata

  2. Välj värden från XML-fältet i SQL Server 2008

  3. Atomic UPSERT i SQL Server 2005

  4. PostgreSQL-motsvarighet för MySQL GROUP BY