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