Séparer la donnée d'une colonne en plusieurs colonne

Signaler
-
Messages postés
33466
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2021
-
Bonjour Mesdames et Messieurs,

Voilà mon problème, dans une colonne nommée "MaData" ma donnée est de ce format "##;##;##;##;##" les ## étant des valeurs numériques.
Je souhaiterai à l'aide d'un requête SQL venir récupérer cette donnée et de la séparer pour l'afficher en plusieurs colonne. J'ai essayé différentes propositions mais rien de concluant.

Pour vous donner une meilleure explication voici un exemple:
En exécutant ce code,
Select 
 PARSENAME(REPLACE('0;10;56', ';', '.'), 1) AS FirstValue
,PARSENAME(REPLACE('0;10;56', ';', '.'), 2) AS SecondValue
,PARSENAME(REPLACE('0;10;56', ';', '.'), 3) AS ThirdValue


le résultat est = 56 | 10 | 0

Jusque la tout va bien. Or, dès que je modifie ma requête pour aller chercher "MaData" cela ne fonctionne plus. Ex:

SELECT TOP (1)
      [MaData] --DATA sous forme de "CSV"  exemple (1;2;3;4;5;6;7;8;9;10;11)
	  ,PARSENAME(REPLACE([MaData], ';', '.'), 1) AS FirstValue
	  ,PARSENAME(REPLACE([MaData], ';', '.'), 2) AS SecondValue
	  ,PARSENAME(REPLACE([MaData], ';', '.'), 2) AS ThirdValue
  FROM CopiloteTest.dbo.Info_Plc


Le résultat est = 1;2;3;4;5;6;7;8;9;10;11 | NULL | NULL | NULL
Et je souhaiterai avoir = 1;2;3;4;5;6;7;8;9;10;11 | 11| 10 | 9

J'ai également essayé de faire un "CAST" mais sans succès...
En espérant que vous avez pu comprendre mon problème et ayez une réponse.

Cordialement,

Configuration: Windows serveur

1 réponse

Messages postés
33466
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 septembre 2021
3 716
Bonjour
Peut-être
SELECT TOP (1)
  [MaData]
  ,REVERSE(PARSENAME(REPLACE(REVERSE([MaData]), ';', '.'), 1)) AS FirstValue
  , REVERSE(PARSENAME(REPLACE(REVERSE([MaData]), ';', '.'), 2)) AS SecondValue
  , REVERSE(PARSENAME(REPLACE(REVERSE([MaData]), ';', '.'), 3)) AS ThirdValue
  FROM CopiloteTest.dbo.Info_Plc