我有一个nvarchar
列,其中包含类似以下的值:
item1+item2
item1+2item2
4item1+item2+2item3
我想要一个标量函数来计算项目计数。
作为上述示例,我们注意到:
以上示例的所需计数应为:
item1+item2 2
item1+2item2 3
4item1+item2+2item3 7
答案 0 :(得分:0)
这里是使用try_convert()
和string_split()
的选项
这是假设一位数的线索。
示例
Declare @YourTable Table ([SomeCol] varchar(50)) Insert Into @YourTable Values
('item1+item2')
,('item1+2item2')
,('4item1+item2+2item3')
Select *
From @YourTable A
Cross Apply (
Select value = sum(isnull(try_convert(int,left(value,1)),1))
From string_split(SomeCol,'+')
) B
返回
SomeCol value
item1+item2 2
item1+2item2 3
4item1+item2+2item3 7
答案 1 :(得分:0)
您可以分割值。然后提取开头的数字:
select t.*, v.the_sum
from t cross apply
(select sum(coalesce(nullif(v.num, 0), 1)) as the_sum
from string_split(col, '+') s cross apply
(values (try_convert(int, left(s.value, patindex('%[^0-9]%', ltrim(s.value) + ' ') - 1
)
)
)
) v(num)
) v;
Here是db <>小提琴。
注意:这假设前缀永远不会显式0
。可以解决,但是增加了一些不必要的复杂性。