我在SQL Server 2008中有这样的表:
create table test (id int, array varchar(max))
insert into test values (1,',a,b,c,d')
insert into test values (2,',a,b,c,d,e')
insert into test values (3,',a,b,c')
我想计算数组列的元素数,结果如下:
id count
--- -----
1 4
2 5
3 3
如何在SELECT语句中实现这一点?我理解制作一个处理计数的函数可能有所帮助,但只是想知道它是否可以在没有用户定义函数的情况下实现。
答案 0 :(得分:2)
到目前为止,最好的选择是停止在数据库中存储数组。这违反了1NF,这是一个糟糕的设计决定。
然而,您可以通过简单的替换获得您正在寻找的结果。
select ID
, LEN(array) - LEN(replace(array, ',', ''))
from test
答案 1 :(得分:1)
你可以计算长度差异:
select id, len(array) - len(replace(array, ',', ''))
from test