sql >> Database teknologi >  >> RDS >> Sqlserver

Opdeling af variabel længde afgrænset streng på tværs af flere rækker (SQL)

Først, lad mig bare sige, at dette er grunden til, at du ikke bør have kommaseparerede data i et felt i første omgang. Der er ingen nem eller effektiv måde at arbejde med det på.

Når det er sagt, kan du bruge en rekursiv forespørgsel til at opdele strengen og få tallene fra den:

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

Resultat:

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



  1. pass parameter i tabel værdisat funktion ved hjælp af select statement

  2. Fejlfinding Ulovlig blanding af sorteringsfejl i mysql

  3. Kompleks IF-sætning med 3 tabeller

  4. Opsætning af MySQL InnoDB Cluster med MySQL Shell (plus MySQL Router)