我的表中的列包含A_B_C_D_E_F形式的数据。我希望这些数据位于同一行的不同列中,例如
我创建了一个示例代码,它将初始的代码分开,即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
此外,我已将数据直接传递给变量,但最初它是表中的一列,我必须逐个传递它。请帮忙解决它。
答案 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;