Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fractionnement d'une chaîne délimitée de longueur variable sur plusieurs lignes (SQL)

Tout d'abord, permettez-moi de dire que c'est la raison pour laquelle vous ne devriez pas avoir de données séparées par des virgules dans un champ en premier lieu. Il n'existe aucun moyen simple ou efficace de travailler avec.

Cela dit, vous pouvez utiliser une requête récursive pour diviser la chaîne et en extraire les nombres :

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

Résultat :

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