一尘不染

如何计算逗号分隔列表MySQL中的项目

mysql

所以我的问题很简单:

我在SQL中有一列,这是一个用逗号分隔的列表(即cats,dogs,cows,),我需要 使用sql
来计算其中的项目数(所以无论我的功能是什么(现在将其称为fx)都将像这样工作:

 SELECT fx(fooCommaDelimColumn) AS listCount FROM table WHERE id=...

我知道那是有缺陷的,但是您可以理解(顺便说一句,如果的值fooCommaDelimColumncats,dogs,cows,,则listCount应该返回4
…)。

就这些。


阅读 227

收藏
2020-05-17

共1个答案

一尘不染

没有内置函数可以计算字符串中子字符串的出现次数,但是您可以计算原始字符串与相同字符串之间的差异(不带逗号):

LENGTH(fooCommaDelimColumn) - LENGTH(REPLACE(fooCommaDelimColumn, ',', ''))

现在已经差不多在8年的时间里对其进行了多次编辑(哇!),所以为了清楚起见:上面的查询不需要+ 1,因为OPs数据带有多余的逗号。

确实,通常情况下,对于如下所示的字符串:foo,bar,baz正确的表达式为

LENGTH(col) - LENGTH(REPLACE(col, ',', '')) + 1
2020-05-17