Mysql - 从逗号分隔的字段计算值

时间:2013-01-31 20:32:49

标签: mysql count

我必须从只读db做一些静态,其中值以奇怪的形式存储

例如: 我有两行,如

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

我需要能够算出这是“5”。

我没有写入权限,所以不知道如何在没有创建功能的情况下立即阅读和计数。

7 个答案:

答案 0 :(得分:19)

这里有一个聪明的解决方案:How to count items in comma separated list MySQL

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

编辑

是的,您可以选择它作为附加列:并使用@HamletHakobyan的答案中的CHAR_LENGTH进行更正:

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

答案 1 :(得分:9)

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

答案 2 :(得分:4)

在所有答案中都有一个小但重要的遗漏。只有当数据库字符集为utf8左右时,即符号,获得一个字节时,所有这些都将起作用。 LENGTH函数返回 bytes 的数量而非 chars 的事实。正确答案是使用返回字符数的CHAR_LENGTH

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

答案 3 :(得分:0)

您可以使用以下内容:

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

请参阅SQL Fiddle with Demo

答案 4 :(得分:0)

一切都错了,对我不起作用。 唯一起作用的就是这个波纹管

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

这是我的小提琴

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

答案 5 :(得分:0)

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

此处LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', ''))给出每列值中的逗号数。带有该值的+1提供以逗号分隔的值的数量。

答案 6 :(得分:0)

如果某人正在寻找解决方案以为空字段返回0。

Expected a ')' with this piece of code on the int[4] pins ^