Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да сумирате низ, разделен със запетая в SQL?

С много усилия можете да направите това. Наистина обаче това е много, много лош начин за съхраняване на данни.

В духа, че понякога се налага да използваме данни, чийто формат не е под наш контрол:

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;

Вложеното извикано към substring_index() извличане на n-тата стойност в низа. concat(value, ',0') е да се справим със случая, когато има по-малко стойности от изразите. В този случай вложеният substring_index() ще върне последната стойност за всяка стойност от n, по-голяма от броя на елементите в списъка. Конкатенация на 0 към списъка гарантира, че това няма да повлияе на сумата.

SQL Fiddle е тук .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкването на данни от CSV в MySQL DB е много бавно

  2. Получаване на ред преди и след заявка

  3. Параметър номер 2 не е OUT параметър

  4. обработката на голям брой записи в базата данни с пейджинг се забавя с времето

  5. Изчисляване на разстоянието между пощенските кодове в PHP