Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Trennzeichenfolge mit variabler Länge auf mehrere Zeilen aufteilen (SQL)

Lassen Sie mich zunächst sagen, dass dies der Grund dafür ist, dass Sie in erster Linie keine kommagetrennten Daten in einem Feld haben sollten. Es gibt keinen einfachen oder effizienten Weg, damit zu arbeiten.

Das heißt, Sie können eine rekursive Abfrage verwenden, um die Zeichenfolge aufzuteilen und die Zahlen daraus zu erhalten:

with split as
(
  select
    item = cast('' as varchar(max)),
    source = cast('20,0, 5,,^24,0, 0,,^26,0, 0,,^281,0, 0,,^34,0, 2,,^48,0, 2,,^44,0, 2,,^20,0, 10,,^20,5, 5,,^379,1, 1,,^26,1, 2,,^32,0, 1,,^71,0, 2,,^' as varchar(max))
  union all
  select
    item = substring(source, 1, charindex(',,', source)),
    source = substring(source, charindex(',,', source) + 2, 10000)
  from split
  where source > ''
)
select substring(item, 1, charindex(',', item) -1)
from split
where item > ''

Ergebnis:

20
^24
^26
^281
^34
^48
^44
^20
^20
^379
^26
^32
^71