J'ai besoin d'aide pour comprendre comment ajouter un trait d'union à une colonne où les valeurs sont les suivantes, 8601881, 9700800.2170 P>
Le trait d'union est censé être juste avant le dernier chiffre. Il existe plusieurs valeurs de ce type dans la colonne et la longueur des nombres pourrait être de 5,6 ou plus, mais le trait d'union doit être avant le dernier chiffre. P>
Toute aide est grandement appréciée. P>
La production attendue devrait être la suivante, 860188-1970080-0,217-0 P>
3 Réponses :
create table data1(value varchar(100));
insert into data1 values('6789567,5467474,846364');
insert into data1 values('98765434,6474644,76866,68696');
insert into data1 values('1234567,35637373');
select t.value, string_agg(concat(substring(token.value, 1, len(token.value)-1), '-',
substring(token.value, len(token.value), 1)), ',') as result
from data1 t cross apply string_split(value, ',') as token group by t.value;
value | result
:--------------------------- | :-------------------------------
1234567,35637373 | 123456-7,3563737-3
6789567,5467474,846364 | 678956-7,546747-4,84636-4
98765434,6474644,76866,68696 | 9876543-4,647464-4,7686-6,6869-6
Bonjour, la longueur des valeurs de la colonne peut différer alors cela fonctionnera pour cela.
@priyesha, je pensais que la valeur de la colonne est un numéro unique. Voulez-vous dire que la valeur de colonne est-elle séparée par des virgules de longueur variable? En outre, il y aura des espaces avant et après la virgule?
@Hogan je ne vous ai pas demandé. J'ai demandé à OP pour la clarification.
@Hogan Il semble que vous comprenez bien la question et tout le monde ici est faux :) Quoi qu'il en soit, j'attendrai OP pour la clarification.
De la question "Il existe plusieurs valeurs de telles valeurs dans la colonne"
Utilisation SQL Server 2017, vous pouvez exploiter String_split, Stuff et string_agg pour gérer cela assez facilement. Retours P> 8601881,9700800,2170 => 860188-1,970080-0,217-0
Le problème avec cette réponse est qu'il ne traite pas de la question. La question a des analyses d'exemple avec 3 valeurs qui sont beaucoup changées. Vous ne changez qu'une valeur.
@Hogan dont 3 valeurs faisez-vous référence? J'ai utilisé les valeurs qu'il a fournies dans la question.
Ces 3 valeurs ne sont pas chacune d'une rangée. ils sont dans une colonne. Il veut changer de colonnes qui en ont 3 chiffres.
@HOGAN - J'ai mis à jour la mise à jour pour gérer plusieurs numéros dans la même ligne
@ WES, l'exigence est pour ces valeurs et d'autres personnes comme dans une colonne. Donc, les valeurs que j'ai mentionnées sont une ci-dessous de l'autre et que de nombreuses autres valeurs de ce type et la longueur de chaque valeur pourraient être un nombre différent de caractères. L'exigence reste la même chose, ajoutez un trait d'union avant le dernier chiffre, merci d'avoir examiné cela.
@priyesha - Si vous voulez dire que chaque numéro est sa propre ligne / enregistrement, vous utilisez simplement la commande STUPT en soi: des trucs (valeur, len (valeur), 0, '-')
Vous pouvez utiliser la méthode len et gauche / droite pour obtenir la sortie souhaitée. La logique est donnée ci-dessous:
Remarque: cela fonctionnera pour une valeur de n'importe quelle longueur. P>
DECLARE @T VARCHAR(MAX) = '8601881' SELECT LEFT(@T,LEN(@T)-1)+'-'+RIGHT(@T,1)
Le problème avec cette réponse est qu'il ne traite pas de la question. La question a des analyses d'exemple avec 3 valeurs qui sont beaucoup changées. Vous ne changez qu'une valeur.
Juste la logique donnée. Il peut être applicable à n'importe quelle valeur de valeur. Alors, où est l'isuse?
Votre code donnerait le résultat 8601881,9700800.217-0 code> il veut 860188-1 970080-0,217-0 code>
Nope ... ces 3 valeurs sont différentes. Pas de la valeur de la colonne d'une seule ligne.
"Il existe plusieurs valeurs de telles valeurs dans la colonne" - de la question
@mkrabbani, je reçois une erreur lorsque j'essaie votre solution, "paramètre de longueur non valide transmis à la fonction de gauche ou de sous-chaîne"
Pouvez-vous vérifier le résultat ici - dbfiddle.uk/...
Il y a plusieurs façons d'accomplir ceci. Le plus facile est d'utiliser Stuff
La meilleure question est de savoir pourquoi vous stockez plusieurs valeurs dans une colonne VARCHAR. Votre schéma est la source de ce problème - résolvez-le et votre objectif devient trivialement simple.
@Smor, merci pour la tête, mais c'est ce que j'ai jusqu'à présent et ce que j'ai besoin de travailler avec
Y a-t-il toujours un
, code> avant les deux premiers? Y a-t-il des espaces suivants?Quelle est votre version SQL Server?
Corrigez votre modèle de données! Vous ne devriez pas stocker des listes d'identifiants comme chaînes dans une colonne de chaîne.
@Gordon, je suis juste un utilisateur du modèle de données et je ne peux pas résoudre ce problème
hahaha je suppose que chacune de ces valeurs était une ligne différente. Semble que ce n'est pas le cas. >. <