0

我有一个输入变量

@inputData varchar(Max)

例如:

Victor:2;John:22;Jo:100

如何将变量分成两列?

Col1    Col2
----------
Victor   2
John     22
Jo       100
4

2 回答 2

0

这是脚本,它从单个字符串值中提供多列和多行。

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
于 2013-07-06T06:36:44.203 回答
0

可能不是一个很好/有效的解决方案,通常基于您的示例;您可以尝试以下方法:

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(用户定义函数)。这只是一个示例,您可能想从这里进一步了解它。

于 2013-07-06T06:20:12.367 回答