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 с этим значением предоставляет количество значений, разделенных запятой.