Sql server 2008 将SQL字符串转换为多列
我有一个输入变量Sql server 2008 将SQL字符串转换为多列,sql-server-2008,split,sql-function,Sql Server 2008,Split,Sql Function,我有一个输入变量 @inputData varchar(Max) e、 g: Victor:2;John:22;Jo:100 如何将变量拆分为两列 Col1 Col2 ---------- Victor 2 John 22 Jo 100 可能不是一个非常好/有效的解决方案,通常基于您的示例;您可以尝试以下方法: create table tab1(col varchar(100)) insert into tab1 values ('key1:val1;ke
@inputData varchar(Max)
e、 g:
Victor:2;John:22;Jo:100
如何将变量拆分为两列
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(用户定义函数)。这只是一个简单的例子
下面是脚本,它从单个字符串值中提供了多个列和行
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
是的,我们将把它实现为UDF,并在SP中使用它。如果两个列值的长度相同,那么Thanksit是有效的。我有一个条件,列值不具有相同的长度。我已经根据我的问题进行了编辑。