标量函数计算项目数?

时间:2020-05-10 21:20:08

标签: sql sql-server

我有一个nvarchar列,其中包含类似以下的值:

item1+item2
item1+2item2
4item1+item2+2item3

我想要一个标量函数来计算项目计数。

作为上述示例,我们注意到:

  • 以“ +”分隔的项目
  • 该项目的开头可能是数字。这是商品数。

以上示例的所需计数应为:

item1+item2           2
item1+2item2          3
4item1+item2+2item3   7

2 个答案:

答案 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。可以解决,但是增加了一些不必要的复杂性。

相关问题