假设我有一张桌子在哪里Col2
varchar
Col1 Col2
1 001,002
2 003,004,005
如果我这样做,我需要计算 Col2 中的元素数量并返回它:
select --do something here with column-- from table
它会给我:
2
3
因此,通过计算,
Col2 中的 s 数量并将其加 1 即可得到答案。下面我得到了 Col2 的长度。然后我,
什么都没有替换 s 并得到那个长度。我取第一个长度并减去第二个长度以获得逗号总数。然后只需将 1 添加到结果即可获得您要查找的总数:
SELECT (LENGTH(Col2) - LENGTH(REPLACE(Col2,",","")) + 1) AS MyCol2Count
FROM MyTable
如果它总是这样格式化,只需计算逗号的数量,然后加 1:
select regexp_count(col, ',') + 1
from table
在 Col2 为空的特殊情况下,Linger 的答案是不正确的。而不是产生 0 的计数,您会得到错误的计数 1。您可以使用 CASE 语句来解释这种特殊情况,如下所示:
SELECT CASE WHEN Col2='' THEN 0 ELSE LENGTH(Col2)-LENGTH(REPLACE(Col2,",",""))+1 END AS MyCol2Count
FROM MyTable
编辑:正如威廉指出的那样,如果您的表设置为允许有问题的列使用 NULL,则空字符串 WHEN 测试可能不准确。在这种情况下,您需要将Col2=''测试替换为Col2 IS NULL(至少在 SQL Server 中)。
注意:抱歉,我会将此作为对 Linger 答案的评论,但我还不允许发表评论。