Mysql - подсчет значений из поля, разделенного запятыми

Мне нужно сделать некоторую статику из db только для чтения, где значение хранится в странной форме

Пример: У меня есть 2 строки, например

ID    text field 
1     1001,1003,1004 
2     1003, 1005

Мне нужно учесть, что это "5".

У меня нет доступа для записи, поэтому я не знаю, как читать и считать сразу без создания функции или что-то в этом роде.

Ответ 1

Умное решение здесь на SO: Как подсчитать элементы в списке, разделенном запятыми MySQL

LENGTH(textfield) - LENGTH(REPLACE(textfield, ',', '')) + 1

EDIT

Да вы можете выбрать его как дополнительный столбец: и исправление с помощью CHAR_LENGTH из ответа @HamletHakobyan:

SELECT 
  ID, 
  textfield, 
  (CHAR_LENGTH(textfield) - CHAR_LENGTH(REPLACE(textfield, ',', '')) + 1) as total 
FROM table

Ответ 2

SELECT SUM(LENGTH(textfield) - LENGTH(REPLACE(textfield, ',', '')) + 1)
  FROM tablename

Ответ 3

Во всех ответах есть небольшое, но значительное упущение. Все будет работать только в том случае, если набор символов базы данных равен utf8 или так, то есть где символ , получает один байт. Тот факт, что функция LENGTH возвращает число bytes вместо chars. Правильный ответ - использовать CHAR_LENGTH, который возвращает количество символов.

SELECT
   SUM(CHAR_LENGTH(textfield) - CHAR_LENGTH(REPLACE(textfield, ',', '')) + 1) cnt
FROM yourTable

Ответ 4

Вы можете использовать что-то вроде этого:

select sum(total) TotalWords
from
(
  select length(`text field`) - length(replace(`text field`, ',', '')) + 1 total
  from yourtable
) x

Смотрите SQL Fiddle with Demo

Ответ 5

Все не так и у меня не работает. Единственный, кто работает, это ниже

´´´ SELECT (длина (textfield) - длина (заменить (textfield, ',', '')) + 1) как мой FROM yourtable; '''

Ответ 6

Все не так и у меня не работает. Единственный, кто работает, это ниже

SELECT (length('textfield') - length(replace('textfield', ',', '')) + 1) as my
FROM yourtable;

Это моя скрипка

http://sqlfiddle.com/#!9/d5a8e1/10

Ответ 7

SELECT (LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', '')) + 1) as value_count
  FROM table_name

Здесь LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', '')) дает число запятых в значении каждого столбца. И +1 с этим значением предоставляет количество значений, разделенных запятой.