计算Oracle中逗号分隔字符串中的元素数

时间:2013-11-11 20:55:19

标签: sql oracle

假设我有一张Col2是varchar

的表
Col1 Col2
1    001,002
2    003,004,005

我需要计算Col2中的元素数量,如果我这样做,则返回它:

select --do something here with column-- from table

它会给我:

2
3 

3 个答案:

答案 0 :(得分:19)

因此,通过计算您在Col2中的,个数量并向其中添加1将为您提供答案。下面我得到了Col2的长度。然后我用什么都替换, s并得到那个长度。我取第一个长度并减去第二个长度以得到逗号的总数。然后只需在结果中添加1即可获得您要查找的总数:

SELECT (LENGTH(Col2) - LENGTH(REPLACE(Col2,",","")) + 1) AS MyCol2Count
FROM MyTable

答案 1 :(得分:14)

如果它总是像count the number of commas那样格式化,然后添加1:

select regexp_count(col, ',') + 1
  from table

答案 2 :(得分:1)

在Col2为空的特殊情况下,Linger的答案是不正确的。您可以获得错误的计数,而不是计数为0.您可以使用CASE语句解释此特殊情况,如下所示:

SELECT CASE WHEN Col2='' THEN 0 ELSE LENGTH(Col2)-LENGTH(REPLACE(Col2,",",""))+1 END AS MyCol2Count
FROM MyTable

编辑:正如William指出空字符串WHEN测试可能不准确,如果您的表设置为允许相关列的NULL。在这种情况下,您需要将 Col2 =''测试替换为 Col2 IS NULL (至少在SQL Server中)。

注意:道歉,我会把这个作为对Linger答案的评论,但我不能发表评论。