sql >> Base de Datos >  >> RDS >> Sqlserver

Dividir una cadena delimitada de longitud variable en varias filas (SQL)

Primero, déjame decirte que esta es la razón por la que no deberías tener datos separados por comas en un campo en primer lugar. No existe una manera fácil o eficiente de trabajar con él.

Dicho esto, puede usar una consulta recursiva para dividir la cadena y obtener los números de ella:

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

Resultado:

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