2016-07-06 11 views
2

Ich habe so etwas wieSuche nach Zeichenketten in Dateien mit SQL

set @file = 'aaaa,bbbb,cccc,dddd,eeee,ffff' 
SELECT SUBSTRING(@file,CHARINDEX(',',@file)+1, CHARINDEX(',',@file,CHARINDEX(',',@file)+1) -CHARINDEX(',',@file)-1) as My_string 

Dieses heraus gedruckt werden

 My_string 
    ---------------- 
    1|  bbbb 

Wie könnte ich es drucken zu machen?

My_string 
------------ 
1| bbbb 
2| cccc 
3| dddd 
4| eeee 
+3

Werfen Sie einen Blick hier http://stackoverflow.com/questions/5493510/turning-a-comma-separated-string-into-individual-rows –

+0

Microsoft SQL Server 2008 R2 –

Antwort

2

diesen Code Versuchen. (Refered von Turning a Comma Separated string into individual rows)

declare @file varchar(max) 
set @file = 'aaaa,bbbb,cccc,dddd,eeee,ffff' 

;with tmp(DataItem, Data) 
as (
select LEFT(@file, CHARINDEX(',',@file+',')-1), 
    STUFF(@file, 1, CHARINDEX(',',@file+','), '') 
union all 
select LEFT(Data, CHARINDEX(',',Data+',')-1), 
    STUFF(Data, 1, CHARINDEX(',',Data+','), '') 
from tmp 
where Data > '') 
select DataItem from tmp 
+0

Ich muss etwas fragen, über das ich neugierig bin, gibt es eine Möglichkeit, etwas wie 'set @file = 'aaa, 2,1, bbb, 3,2, ccc, 1, ddd, 2, eee, 3,2 zu sagen '', gibt es eine Möglichkeit,' aaa & bbb & ccc & ddd & eee' als erste_Spalte '2 & 3 & 1 & 2 & 3' als zweite_Spalte und' 1 & 2 & NULL & NULL & 2'als dritte_Spalte zu platzieren? Und ich frage nach diesem spezifischen Beispiel nicht für andere, die String String int oder Int int String wäre, ich frage nach diesem Beispiel, wo Sie haben string, int, int –

+0

Ja, aber die Einbeziehung optionaler Spalten kompliziert Angelegenheiten. Wenn Sie die Regeln spezifizieren können, vielleicht in einer neuen Frage, sind wir sicher, dass wir uns etwas einfallen lassen können. –

+0

http://stackoverflow.com/questions/38238242/read-char-double-int-pattern-from-string-in-sql –

2

Verwenden Sie eine der Split string functions ..ich unten Funktion ..

declare @file nvarchar(max) 
set @file = 'aaaa,bbbb,cccc,dddd,eeee,ffff' 

select row_number() over (order by (select null)) as number,b.* 
from 
[dbo].[SplitStrings_Numbers](@file,',') b 

Ausgang:

number Item 
1 aaaa 
2 bbbb 
3 cccc 
4 dddd 
5 eeee 
6 ffff 

Code Split string source i für Vollständigkeits verwendet:

CREATE FUNCTION dbo.SplitStrings_Numbers 
    (
     @List  NVARCHAR(MAX), 
     @Delimiter NVARCHAR(255) 
    ) 
    RETURNS TABLE 
    WITH SCHEMABINDING 
    AS 
     RETURN 
     (
      SELECT Item = SUBSTRING(@List, Number, 
      CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number) 
      FROM dbo.Numbers 
      WHERE Number <= CONVERT(INT, LEN(@List)) 
      AND SUBSTRING(@Delimiter + @List, Number, LEN(@Delimiter)) = @Delimiter 
     ); 
2

Sie könnten dies auf diese Weise mit XML tun.

Testdaten

IF OBJECT_ID('tempdb..#TestData') IS NOT NULL DROP TABLE #TestData 
GO 
CREATE TABLE #TestData (StringName varchar(100)) 
INSERT INTO #TestData (StringName) 
VALUES ('aaaa,bbbb,cccc,dddd,eeee,ffff') 

Abfrage

SELECT Split.a.value('.', 'VARCHAR(100)') AS String 
FROM (SELECT [StringName], 
     CAST ('<M>' + REPLACE(StringName, ',', '</M><M>') + '</M>' AS XML) AS String 
    FROM #TestData) AS A 
CROSS APPLY String.nodes ('/M') AS Split(a); 

Ergebnis

String 
aaaa 
bbbb 
cccc 
dddd 
eeee 
ffff 
2
DECLARE @file varchar(255) 
SET @file = 'aaaa,bbbb,cccc,dddd,eeee,ffff' 
DECLARE @X xml 
DECLARE @Split char(1) = ',' 
SELECT @X = CONVERT(xml,'<root><s>' + REPLACE(@file,@Split,'</s><s>') + '</s></root>') 

SELECT [Value] = T.c.value('.','varchar(20)') 
FROM @X.nodes('/root/s') T(c) 

Ausgabe

Value 
aaaa 
bbbb 
cccc 
dddd 
eeee 
ffff 
Verwandte Themen