STRING_SPLIT 到多个变量

Del*_*rog 5 sql sql-server

我有一个看起来像这样的字符串:

'1.25,5.34,6.9,8.6547,2.3'
Run Code Online (Sandbox Code Playgroud)

我想将每个逗号分隔值存储到像这样的变量中,但以编程方式在 T-SQL 中存储:

Declare @Var1 float
Set @Var1 = 1.25
...

@Var2 = 5.34 
@Var3 = 6.9
Run Code Online (Sandbox Code Playgroud)

等等等等..

我该怎么做呢?

Pan*_*vos 5

转换为 JSON

也许最简单的解决方案是将字符串转换为 JSON 数组并按位置访问项目:

declare @text varchar(200)='1.25,5.34,6.9,8.6547,2.3'
declare @json varchar(202)='[' + @text + ']'

declare @var1 numeric(18,5)= JSON_VALUE(@json,'$[0]')
declare @var2 numeric(18,5)= JSON_VALUE(@json,'$[1]')

select @var1,@var2
Run Code Online (Sandbox Code Playgroud)

存储在表变量中但丢失顺序

基于集合的解决方案是将项目存储在表变量中,但顺序可能会丢失,正如 Raymond Nijland 指出的那样:

declare @text varchar(200)='1.25,5.34,6.9,8.6547,2.3'

declare @values table (id int identity,val varchar(20))

insert into @values (val)
select trim(value) from STRING_SPLIT(@text,',') x

insert into SomeTable (value1)
select val 
from @values where ID=1
Run Code Online (Sandbox Code Playgroud)

唯一可以施加的顺序是使用 ORDER BY 升序或降序,它假设输入的顺序无关紧要。不是很有帮助。

  • @RaymondNijland 你真的不能,这就是为什么 JSON 可能是最好的选择 (2认同)