STRING_SPLIT到多个变量

时间:2019-05-17 14:35:43

标签: sql sql-server

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

'1.25,5.34,6.9,8.6547,2.3'

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

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

@Var2 = 5.34 
@Var3 = 6.9

以此类推。

我该怎么办?

2 个答案:

答案 0 :(得分:4)

转换为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

存储在表变量中但丢失订单

基于集合的解决方案是将项目存储在表变量中但是订单可能会丢失,正如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

使用ORDER BY可以强制执行的唯一顺序是升序或降序,这假定输入的顺序无关紧要。不是很有帮助。

答案 1 :(得分:2)

如果您有固定数量的变量,则可以使用一些XML

  addMenu (mainmenu): Observable<Mainmenu> {
    return this.http.post<Mainmenu>(apiUrl, mainmenu, httpOptions).pipe(
      tap((mainmenu: Mainmenu) => console.log(`added mainmenu w/ id=${mainmenu._id}`)),
      catchError(this.handleError<Mainmenu>('addMenu'))
    );
  }