5

假设我有一张桌子在哪里Col2varchar

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

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

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

它会给我:

2
3 
4

3 回答 3

19

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

SELECT (LENGTH(Col2) - LENGTH(REPLACE(Col2,",","")) + 1) AS MyCol2Count
FROM MyTable
于 2013-11-11T20:59:12.807 回答
14

如果它总是这样格式化,只需计算逗号的数量,然后加 1:

select regexp_count(col, ',') + 1
  from table
于 2013-11-11T20:59:45.910 回答
2

在 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 答案的评论,但我还不允许发表评论。

于 2017-12-06T17:50:29.253 回答