sql >> Database >  >> RDS >> Sqlserver

Gescheiden tekenreeks met variabele lengte over meerdere rijen splitsen (SQL)

Laat me eerst zeggen dat dit de reden is dat je in de eerste plaats geen door komma's gescheiden gegevens in een veld mag hebben. Er is geen gemakkelijke of efficiënte manier om ermee te werken.

Dat gezegd hebbende, je kunt een recursieve zoekopdracht gebruiken om de string te splitsen en de getallen eruit te halen:

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 > ''

Resultaat:

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



  1. Van grondtal 10 naar grondtal 26 alleen met letters zodat 26 aa . wordt

  2. MySQL-updatekolom alleen als waarde niet leeg is waar

  3. PostgreSQL ERROR:annulatieverklaring wegens conflict met herstel

  4. gegevens importeren in PostgreSQL en exporteren naar CSV