2016-08-08 46 views
0

Hallo alle helfen mir bitte dieSQL Server Split-String und erhalten den Wert

von

select details from table 
enter code here 

Ergebnis Ergebnis:

Title|Firstname|Lastname|Mobilephone~Mr|jack|steve|123456789~Mr|test|Ltest|123456789~Mrs|Demo|Ldemo|12345678~Mrs|Fname|Lname|1234567 

ich den

Title FirstName LastName Mobile 
Mr  jack  steve  1234567789 
etc... 
unten Ergebnis benötigen
+1

Id betrachten refactornig der Tabellenentwurf stattdessen arbeiten um ihn herum .. – SomeJavaGuy

+0

ich mit Kevin Esche gehen, Sie Refactoring die Tabelle denken sollten Design, aber ich habe eine Lösung für Ihre Frage in unten gegeben. Bitte überprüfe unten meine Antwort. –

Antwort

0

Sie müssen gespeicherte Prozedur schreiben, wi ll scanne die komplette Linie und gebe dir röhrengetrennte Werte in einer Schleife.

0

Eine Lösung für Ihr Problem ist, wie unten angegeben:

DECLARE @PARAM_STRING VARCHAR(1000)=REPLACE('Title|Firstname|Lastname|Mobilephone~Mr|jack|steve|123456789~Mr|test|Ltest|123456789~Mrs|Demo|Ldemo|12345678~Mrs|Fname|Lname|1234567','|',''',''')+'''' 
DECLARE @DYNAMIC_QUERY VARCHAR(MAX) 
DECLARE @TABLE TABLE(ID INT,DATA VARCHAR(MAX)) 
INSERT INTO @TABLE 
SELECT 1 ID, 'SELECT '+DATA FROM (
SELECT A.B.value('.','VARCHAR(50)')DATA FROM 
(SELECT CAST('<A>'''+REPLACE(@PARAM_STRING,'~','''</A><A>''')+'</A>' AS  XML)COL)T 
CROSS APPLY T.COL.nodes('/A') AS A(B))F WHERE DATA<>'' 
SELECT @DYNAMIC_QUERY=STUFF((SELECT ' UNION ALL ' + CAST(DATA AS  VARCHAR(MAX))  [text()]FROM @TABLE WHERE ID = t.ID 
    FOR XML PATH(''), TYPE).value('.','NVARCHAR(MAX)'),1,10,' ') 
FROM @TABLE t GROUP BY ID 
EXECUTE(@DYNAMIC_QUERY)