假设我有一张表,其中Col2
是varchar类型
Col1 Col2
1 001,002
2 003,004,005
我需要计算Col2中元素的数量,并将其返回,如果我这样做:
select --do something here with column-- from table
它将给我:
2
3
,
的数量并将其加1,即可得到答案。以下代码获取 Col2 的长度,然后将其中的,
替换为空格并获取新长度。将第一个长度减去第二个长度,即可得到逗号的总数。最后只需在结果上加1,即可得到您要寻找的总数:SELECT (LENGTH(Col2) - LENGTH(REPLACE(Col2,",","")) + 1) AS MyCol2Count
FROM MyTable
如果Col2为空,Linger的答案是不正确的。这样,你将得到一个错误的计数1,而不是0。你可以使用以下CASE语句来处理这种特殊情况:
SELECT CASE WHEN Col2='' THEN 0 ELSE LENGTH(Col2)-LENGTH(REPLACE(Col2,",",""))+1 END AS MyCol2Count
FROM MyTable
编辑:正如William指出的那样,如果您的表允许空值,则空字符串WHEN测试可能不准确。在这种情况下,您需要用Col2 IS NULL替换Col2=''测试(至少在SQL Server中)。
注意:抱歉,我本来想将此作为对Linger答案的评论,但我还没有被允许发表评论。
Col2=''
永远不会为真,因为空字符串只是空值。 - William Robertson
新手问题,Postgres不支持Length函数吗?
- Joshua DanceLEN(Col2)-LEN(REPLACE(col2,';',''))
在 MSSQL 中使事情正常运作。 - Duffer