SSMS从字符串中收集多个变量

问题描述 投票:0回答:2

我正在使用SQL Server 2008和SSMS,并且试图从一个字符串中收集多个变量值。

此方法仅在有一个变量时有效:

String:

There are 2 dogs walking the park in the summer and there are 4 dogs walking the park in the winter
SELECT 
    SUBSTRING(@txt, CHARINDEX('are', @txt), 
                    CHARINDEX('dogs', @txt) - CHARINDEX('are', @txt) + LEN('dogs')) 

这里的结果将是2。我正在寻找一种方法来获得2或4,或总计6。

如果我的信息不完整,请发表评论。

sql sql-server-2008 ssms
2个回答
0
投票

这在最近的SQL Server支持版本中要简单得多。在SQL Server 2008中,可以使用递归CTE:

with cte as (
      select convert(varchar(max), 'There are 2 dogs walking the park in the summer and there are 4 dogs walking the park in the winter') as rest,
             convert(varchar(max), null) as val, 1 as lev
      union all
      select stuff(v.val, 1, patindex('%[^0-9]%', v.val + ' ') - 1, ''),
             left(v.val, patindex('%[^0-9]%', v.val + ' ')), lev + 1
      from cte cross apply
           (values (stuff(cte.rest, 1, patindex('%[0-9]%', cte.rest) - 1, ''))) v(val)
      where cte.rest like '%[0-9]%' 
     )
select val
from cte
where val is not null;

Here是db <>小提琴。


0
投票

一种方法是根据空格将字符串分成单独的部分,然后找出哪些是整数,然后SUM。由于您使用的是不受支持的SQL Server版本,因此您无权访问TRY_CONVERT,这会使此[[way更加容易,但是,至少可以使用DelimitedSplit8K,这会导致类似这个:

DelimitedSplit8K
© www.soinside.com 2019 - 2024. All rights reserved.