16

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

示例:我有 2 行,例如

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

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

我没有写权限,所以不知道如何在不创建函数或类似的东西的情况下立即读取和计数。

4

7 回答 7

30

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
于 2013-01-31T20:36:31.443 回答
10
SELECT SUM(LENGTH(textfield) - LENGTH(REPLACE(textfield, ',', '')) + 1)
  FROM tablename
于 2013-01-31T20:35:51.853 回答
7

所有答案都有一个小而重要的遗漏。只有当数据库字符集是utf8左右时,所有都将起作用,即符号,获得一个字节的地方。LENGTH函数返回数字bytes而不是 的事实chars。正确的答案是使用CHAR_LENGTHwhich 返回字符数。

SELECT
   SUM(CHAR_LENGTH(textfield) - CHAR_LENGTH(REPLACE(textfield, ',', '')) + 1) cnt
FROM yourTable
于 2013-01-31T21:18:06.537 回答
0

你可以使用这样的东西:

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

请参阅带有演示的 SQL Fiddle

于 2013-01-31T20:36:20.070 回答
0

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

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

这是我的小提琴

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

于 2019-01-22T18:15:14.833 回答
0
SELECT (LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', '')) + 1) as value_count
  FROM table_name

这里LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', ''))给出了每列值中逗号的数量。并且 +1 与此值提供以逗号分隔的值的数量。

于 2019-02-19T08:52:01.103 回答
0

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

IF(LENGTH(column_name) > 0, LENGTH(column_name) - LENGTH(REPLACE(column_name, ',', '')) + 1, 0)

于 2020-06-04T22:44:43.337 回答