-2
votes

Comment convertir des enregistrements dans SQL Server

J'ai une colonne avec des valeurs telles que ceci: xxx pré>

code pour convertir 119.305.1983984.1 au 1.1983984.305.119 est: p>

## codel ##
1-829549-305-117
1-1196585-305-119
1-1983984-305-119 // this record has changed
1-224594-305-121
1-1999987-305-121
1-113416-306-122 // this record has changed
1-158059-305-122


6 commentaires

Alors, quel est le problème réel?


Quelle est la version du serveur SQL que vous utilisez?


Voulez-vous faire la même chose avec ceux avec des tirets - ?


Vous semblez avoir oublié la chose la plus importante pour poser une question; poser une question. Qu'est-ce qui est à toi?


À une supposition, peut-être , ils veulent changer les positions des éléments lorsque la valeur se termine par '1' , plutôt que de changer le . < / code> 's à - ? Convertir est définitivement le mauvais mot ici cependant.


Il utilise SQL Server 2012 ou plus récent puisqu'il utilise concat .


3 Réponses :


0
votes

Voici comment vous pouvez diviser votre chaîne en fonction de "". et utilisez les valeurs séparément: xxx

ref: Comment puis-je diviser une chaîne afin que je puisse accéder à l'élément x?


1 commentaires

Je ne recommande pas vraiment un pendant boucle. Il existe de meilleures solutions à base de données pour diviser les données dans SQL Server. La question que vous avez liée a en fait avoir beaucoup plus de upvotes sur la réponse en utilisant parsename ; que l'OP fait (bon?) Utilisation de.



3
votes

il suffit de remplacer le - avec . , car parsename () ne fonctionne qu'avec , pas '-' xxx

retours: xxx

Démo en direct


Si vous avez SQL Server 2017, alors vous pouvez utiliser concat_ws () comme xxx


si vous voulez le Séparateur pour être toujours '-' alors pas besoin de sep , juste directement '-'


0 commentaires

0
votes

Vous devez juste ajouter ce code

 SELECT [Codel],
case WHEN  (CHARINDEX('.',[Codel]) > 0) then 

    CONCAT(PARSENAME([Codel], 1), '-',
           PARSENAME([Codel], 2), '-',
           PARSENAME([Codel], 3), '-',
           PARSENAME([Codel], 4))  
           else [Codel] end
            true_template

  FROM [TestDB].[dbo].[CodelTbl]


0 commentaires