我必须从只读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)
在所有答案中都有一个很小但很明显的遗漏。只有在数据库字符集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)