Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Dividindo a string delimitada por comprimento variável em várias linhas (SQL)


Primeiro, deixe-me dizer que esta é a razão pela qual você não deve ter dados separados por vírgula em um campo em primeiro lugar. Não existe uma maneira fácil ou eficiente de trabalhar com isso.

Dito isso, você pode usar uma consulta recursiva para dividir a string e obter os números dela:
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