所以我的问题很简单:
我在SQL中有一列,这是一个用逗号分隔的列表(即cats,dogs,cows,),我需要 仅 使用sql 来计算其中的项目数(所以无论我的功能是什么(现在将其称为fx)都将像这样工作:
cats,dogs,cows,
SELECT fx(fooCommaDelimColumn) AS listCount FROM table WHERE id=...
我知道那是有缺陷的,但是您可以理解(顺便说一句,如果的值fooCommaDelimColumn是cats,dogs,cows,,则listCount应该返回4 …)。
fooCommaDelimColumn
就这些。
没有内置函数可以计算字符串中子字符串的出现次数,但是您可以计算原始字符串与相同字符串之间的差异(不带逗号):
LENGTH(fooCommaDelimColumn) - LENGTH(REPLACE(fooCommaDelimColumn, ',', ''))
现在已经差不多在8年的时间里对其进行了多次编辑(哇!),所以为了清楚起见:上面的查询不需要+ 1,因为OPs数据带有多余的逗号。
+ 1
确实,通常情况下,对于如下所示的字符串:foo,bar,baz正确的表达式为
foo,bar,baz
LENGTH(col) - LENGTH(REPLACE(col, ',', '')) + 1