我必须从只读数据库中做一些静态数据,其中值以奇怪的形式存储
示例:我有 2 行,例如
ID text field
1 1001,1003,1004
2 1003, 1005
我需要能够算出这是“5”。
我没有写权限,所以不知道如何在不创建函数或类似的东西的情况下立即读取和计数。
SO上的聪明解决方案:如何计算逗号分隔列表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
SELECT SUM(LENGTH(textfield) - LENGTH(REPLACE(textfield, ',', '')) + 1)
FROM tablename
所有答案都有一个小而重要的遗漏。只有当数据库字符集是utf8
左右时,所有都将起作用,即符号,
获得一个字节的地方。LENGTH
函数返回数字bytes
而不是 的事实chars
。正确的答案是使用CHAR_LENGTH
which 返回字符数。
SELECT
SUM(CHAR_LENGTH(textfield) - CHAR_LENGTH(REPLACE(textfield, ',', '')) + 1) cnt
FROM yourTable
你可以使用这样的东西:
select sum(total) TotalWords
from
(
select length(`text field`) - length(replace(`text field`, ',', '')) + 1 total
from yourtable
) x
一切都是错误的,对我不起作用。唯一有效的是这个波纹管
SELECT (length(`textfield`) - length(replace(`textfield`, ',', '')) + 1) as my
FROM yourtable;
这是我的小提琴
SELECT (LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', '')) + 1) as value_count
FROM table_name
这里LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', ''))
给出了每列值中逗号的数量。并且 +1 与此值提供以逗号分隔的值的数量。
如果有人正在寻找解决方案,为空字段返回 0。
IF(LENGTH(column_name) > 0, LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', '')) + 1, 0)