我有一个输入变量
@inputData varchar(Max)
例如:
Victor:2;John:22;Jo:100
如何将变量分成两列?
Col1 Col2
----------
Victor 2
John 22
Jo 100
我有一个输入变量
@inputData varchar(Max)
例如:
Victor:2;John:22;Jo:100
如何将变量分成两列?
Col1 Col2
----------
Victor 2
John 22
Jo 100
这是脚本,它从单个字符串值中提供多列和多行。
declare @inputData varchar(Max) = 'Victor:2;John:22;Jo:100' + ';'
;with row(c1,c2)
as
(
SELECT LEFT
( @inputData
, CHARINDEX(';', @inputData, 0) - 1
) col1
, SUBSTRING
( @inputData
, CHARINDEX(';', @inputData, 0) + 1
, LEN(@inputData)
) col2
UNION ALL
SELECT LEFT
( c2
, CHARINDEX(';', c2, 0) - 1
) col1
, SUBSTRING
( c2
, CHARINDEX(';', c2, 0) + 1
, LEN(c2)
) col2
FROM row
WHERE CHARINDEX(';', c2, 0) >0
)
select LEFT(C1, CHARINDEX(':', c1, 0) - 1) col1, SUBSTRING( c1 , CHARINDEX(':', c1, 0) + 1, LEN(c1)) col2 from row
输出 :
col1 col2
Victor 2
John 22
Jo 100
可能不是一个很好/有效的解决方案,通常基于您的示例;您可以尝试以下方法:
create table tab1(col varchar(100))
insert into tab1 values ('key1:val1;key2:val2;key3:valu3')
询问:
select SUBSTRING((SUBSTRING((left(col,CHARINDEX(';',Col))),0,
charindex(';',col))),0,charindex(':',col)) as Name,
SUBSTRING((SUBSTRING((left(col,CHARINDEX(';',Col))),0,
charindex(';',col))),(charindex(':',col)+1),4) as Age
from tab1
union
select SUBSTRING((SUBSTRING(right(col,CHARINDEX(';',Col)),0,
charindex(';',col))) ,0,charindex(':',col)) as Name,
SUBSTRING((SUBSTRING(right(col,CHARINDEX(';',Col)),0,
charindex(';',col))),(charindex(':',col)+1),4) as Age
from tab1
union
select SUBSTRING((SUBSTRING(substring(col,(CHARINDEX(';',Col) +
1),10),0,charindex(';',col))),0,charindex(':',col)) as Name,
SUBSTRING((SUBSTRING(substring(col,(CHARINDEX(';',Col) + 1),10),0,
charindex(';',col))),(charindex(':',col)+1),4) as Age
from tab1
实现这一点的最佳方法是 UDF(用户定义函数)。这只是一个示例,您可能想从这里进一步了解它。