2017-02-14 4 views
0

Ich habe Spalte in der Tabelle, die Daten in Form von A_B_C_D_E_F hat. Ich mag diese Daten in verschiedenen Spalten der gleichen Zeile also so etwas wieAbfrage, um die Spaltendaten in mehrere Spalten mit demselben speziellen Char zu teilen

enter image description here

Ich habe einen Beispielcode erstellt, die anfänglichen dh A spaltet. Aber später spaltet es noch wie B_C_D_E_ etc ..


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 

Ergebnis ist

A_B_C_D_E_F

A

B_C_D_E

Auch hier habe ich direkt übergeben die Daten in eine Variable, aber ursprünglich ist es eine Spalte in einer Tabelle und ich muss es einzeln übergeben. Bitte helfen Sie bei der Lösung.

+0

[Split reiht den richtigen Weg - oder die nächste sein st Weg] (https://sqlperformance.com/2012/07/t-sql-queries/split-strings) Oder, wenn Sie Version 2016 verwenden, 'STRING_SPLIT()' eingebaute Funktion. –

Antwort

1

Testdaten

DECLARE @t TABLE (Col VARCHAR(200)) 

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

Abfrage

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; 

Ergbnisssatzes

+-------------+------+------+------+------+------+ 
|  Col  | Col1 | Col2 | Col3 | Col4 | Col5 | 
+-------------+------+------+------+------+------+ 
| A_B_C_D_E_F | A | B | C | D | E | 
+-------------+------+------+------+------+------+ 
+0

Danke M.Ali, aber wenn es Ihnen nichts ausmacht, bitte führen Sie, was in meiner Methode falsch war, auch wird es möglich sein, auf diese Weise zu lösen? –

Verwandte Themen