【发布时间】:2013-01-31 20:32:49
【问题描述】:
我必须从只读数据库中做一些静态数据,其中值以奇怪的形式存储
示例: 我有 2 行像
ID text field
1 1001,1003,1004
2 1003, 1005
我需要能够数出这是“5”。
我没有写权限,所以不知道如何在不创建函数或类似的东西的情况下立即读取和计数。
【问题讨论】:
-
看看我的question。有一个满意的答案
我必须从只读数据库中做一些静态数据,其中值以奇怪的形式存储
示例: 我有 2 行像
ID text field
1 1001,1003,1004
2 1003, 1005
我需要能够数出这是“5”。
我没有写权限,所以不知道如何在不创建函数或类似的东西的情况下立即读取和计数。
【问题讨论】:
巧妙的解决方案在这里: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
【讨论】:
SELECT CHAR_LENGTH('a,b,c,d,') - CHAR_LENGTH(REPLACE('a,b,c,d,', ',', '')) + 1 AS total 这会给我5,应该是4
SELECT SUM(LENGTH(textfield) - LENGTH(REPLACE(textfield, ',', '')) + 1)
FROM tablename
【讨论】:
所有答案都有一个很小但很重要的遗漏。仅当数据库字符集为utf8 左右时,所有功能都有效,即符号, 获得一个字节。 LENGTH 函数返回 bytes 的数量而不是 chars 的事实。正确答案是使用 CHAR_LENGTH 返回字符数。
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(column_name) - LENGTH(REPLACE(column_name, ',', '')) + 1) as value_count
FROM table_name
这里LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', '')) 给出了每列值中逗号的数量。并且 +1 与此值提供以逗号分隔的值的数量。
【讨论】:
一切都是错误的,对我不起作用。 唯一有效的就是下面这个
SELECT (length(`textfield`) - length(replace(`textfield`, ',', '')) + 1) as my
FROM yourtable;
这是我的小提琴
【讨论】:
6 年可能会有很多变化。请检查您的答案。
如果有人在寻找解决方案,为空字段返回 0。
IF(LENGTH(column_name) > 0, LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', '')) + 1, 0)
【讨论】: