查询将列数据拆分为具有相同特殊字符的多个列

时间:2017-02-14 14:36:20

标签: sql-server

我的表中的列包含A_B_C_D_E_F形式的数据。我希望这些数据位于同一行的不同列中,例如

enter image description here

我创建了一个示例代码,它将初始的代码分开,即A.但是后来它像B_C_D_E_等一样分裂。

declare @ni nvarchar (max)
declare @tt nvarchar (max)
declare @value nvarchar (max) 

set @ni = 'A_B_C_D_E'

set @turbine =(select LEFT(@ni , CHARINDEX('_', @ni) - 1)  )
set @value = (SELECT SUBSTRING( @ni, CHARINDEX('_', @ni) + 1, LEN(@ni) - CHARINDEX('_', @ni) - CHARINDEX('_', REVERSE(@ni) )
)  
)

select  @ni
select @tt
select @value

结果是

A_B_C_D_E_F

A

B_C_D_E

此外,我已将数据直接传递给变量,但最初它是表中的一列,我必须逐个传递它。请帮忙解决它。

1 个答案:

答案 0 :(得分:1)

测试数据

autoplay

<强>查询

DECLARE @t TABLE (Col VARCHAR(200))

INSERT INTO @t( Col )
VALUES  ( 'A_B_C_D_E_F');

结果集

WITH SplitValues (Col , XmlCol)
AS
(
    SELECT Col
          ,CONVERT(XML,'<Value><value>'  
                   + REPLACE(Col,'_', '</value><value>') + '</value></Value>') AS xmlname
      FROM @t
)

 SELECT Col
      , XmlCol.value('/Value[1]/value[1]', 'varchar(100)') AS Col1
      , XmlCol.value('/Value[1]/value[2]', 'varchar(100)') AS Col2
      , XmlCol.value('/Value[1]/value[3]', 'varchar(100)') AS Col3
      , XmlCol.value('/Value[1]/value[4]', 'varchar(100)') AS Col4
      , XmlCol.value('/Value[1]/value[5]', 'varchar(100)') AS Col5
 FROM   SplitValues;
相关问题