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

ann*_*vio 12 mysql count

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

例如:我有2行像

ID    text field 
1     1001,1003,1004 
2     1003, 1005
Run Code Online (Sandbox Code Playgroud)

我需要能够算出这是"5".

我没有写访问权限,因此不知道如何在不创建函数或类似内容的情况下立即读取和计数.

Mat*_*hew 20

SO上的聪明解决方案:如何计算逗号分隔列表MySQL中的项目

LENGTH(textfield) - LENGTH(REPLACE(textfield, ',', '')) + 1
Run Code Online (Sandbox Code Playgroud)

编辑

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

SELECT 
  ID, 
  textfield, 
  (CHAR_LENGTH(textfield) - CHAR_LENGTH(REPLACE(textfield, ',', '')) + 1) as total 
FROM table
Run Code Online (Sandbox Code Playgroud)


zer*_*kms 10

SELECT SUM(LENGTH(textfield) - LENGTH(REPLACE(textfield, ',', '')) + 1)
  FROM tablename
Run Code Online (Sandbox Code Playgroud)

  • 很好,假设没有字段有空字符串. (2认同)

Ham*_*yan 5

在所有答案中都有一个很小但很明显的遗漏。只有在数据库字符集utf8大约,等于(即符号得到一个字节)的情况下,所有方法才起作用。LENGTH函数返回bytes而不是的事实chars。正确的答案是使用CHAR_LENGTH返回字符数的字符。

SELECT
   SUM(CHAR_LENGTH(textfield) - CHAR_LENGTH(REPLACE(textfield, ',', '')) + 1) cnt
FROM yourTable
Run Code Online (Sandbox Code Playgroud)