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

Sql 计算Oracle中逗号分隔字符串中的元素数,sql,oracle,Sql,Oracle,假设我有一个表,Col2是varchar Col1 Col2 1 001,002 2 003,004,005 我需要计算Col2中的元素数,并返回它,如果我这样做: select --do something here with column-- from table 它会给我: 2 3 因此,通过计算Col2中的,的数量,再加上1,就可以得到答案。下面是Col2的长度。然后我将,s替换为零,并得到该长度。我取第一个长度,减去第二个长度,得到逗号的总数。然后,只需在结果中添加

假设我有一个表,
Col2
是varchar

Col1 Col2
1    001,002
2    003,004,005
我需要计算Col2中的元素数,并返回它,如果我这样做:

select --do something here with column-- from table
它会给我:

2
3 

因此,通过计算Col2中的
的数量,再加上1,就可以得到答案。下面是Col2的长度。然后我将
s替换为零,并得到该长度。我取第一个长度,减去第二个长度,得到逗号的总数。然后,只需在结果中添加1,即可得到所需的总数:

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

如果它总是这样简单地格式化,然后添加1:

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

Linger的回答在Col2为空的特殊情况下是不正确的。您将得到不正确的计数1,而不是计数0。您可以通过以下案例陈述来解释这种特殊情况:

SELECT CASE WHEN Col2='' THEN 0 ELSE LENGTH(Col2)-LENGTH(REPLACE(Col2,",",""))+1 END AS MyCol2Count
FROM MyTable
编辑:正如William指出的,如果您的表设置为允许有问题的列为null,则测试时的空字符串可能不准确。在这种情况下,您需要将Col2=''测试替换为Col2为NULL(至少在SQL Server中是这样)


注意:很抱歉,我本想在林格的回答中对此发表评论,但我还不允许发表评论。

使用此选项,得到
错误:函数长度(jsonb)不存在第1行:选择(长度(收件人)-长度(替换(收件人),“”)…
Rookie q但是Postgres不支持长度吗?是的PostgreSQL确实支持长度函数。请参阅。看看这个。你需要在Postgre中使用单引号,而不是我在答案中显示的双引号。在MSSQL中使用它需要做些什么更改?在MSSQL中使用
LEN(Col2)-LEN(替换(col2,“;”,”)
在Oracle中,
col2='
永远不会为真,因为空字符串只是空字符串。这一点非常好。SQL server中也可能如此。我将编辑我的答案以反映这一点。