繁体   English   中英

MYSQL-计算项目是否用逗号分隔

[英]MYSQL - Count items separated by comma or not

我有一个tinytext字段,其中可以包含3个差值,格式如下:

  • 空值
  • “ X”或“ Y”(其中X和Y可以是任何数字)
  • “ A,B,C,D”(其中A,B,C和D可以是任何数字)

我想查询表并计算用逗号分隔或不分隔的项目数。

例如,这些行:

  • 42
  • 空值
  • 42,56,99
  • 24,10090

则预期计数为6。

我找不到正确的查询。

好的,这是测试数据:

mysql> create table t (f tinytext);
mysql> insert into t values ('42'), (null), ('42,56,99'), ('24,10090');
mysql> select * from t;
+----------+
| f        |
+----------+
| 42       |
| NULL     |
| 42,56,99 |
| 24,10090 |
+----------+

您可以计算出字符串中有多少个数字,作为字符串长度和除去逗号后的字符串的差(列表中的第一个数字加1)。

mysql> select f, length(f), length(replace(f,',','')), 1+ length(f)-length(replace(f,',','')) from t;
+----------+-----------+---------------------------+----------------------------------------+
| f        | length(f) | length(replace(f,',','')) | 1+ length(f)-length(replace(f,',','')) |
+----------+-----------+---------------------------+----------------------------------------+
| 42       |         2 |                         2 |                                      1 |
| NULL     |      NULL |                      NULL |                                   NULL |
| 42,56,99 |         8 |                         6 |                                      3 |
| 24,10090 |         8 |                         7 |                                      2 |
+----------+-----------+---------------------------+----------------------------------------+

因此,请使用SUM()获得总数。 SUM()忽略NULL。

mysql> select sum(1+length(f)-length(replace(f,',',''))) from t;
+--------------------------------------------+
| sum(1+length(f)-length(replace(f,',',''))) |
+--------------------------------------------+
|                                          6 |
+--------------------------------------------+

如果您不将逗号分隔的列表存储在string中,则会更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM