J'ai le tableau A suivant :
id
----
1
2
12
123
1234
J'ai besoin de mettre à gauche le id
les valeurs avec des zéros :
id
----
0001
0002
0012
0123
1234
Comment puis-je y parvenir ?
J'ai le tableau A suivant :
id
----
1
2
12
123
1234
J'ai besoin de mettre à gauche le id
les valeurs avec des zéros :
id
----
0001
0002
0012
0123
1234
Comment puis-je y parvenir ?
Je crois que c'est peut-être ce que vous cherchez :
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
o
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
Je n'ai pas testé la syntaxe du deuxième exemple. Je ne suis pas sûr que cela fonctionne à 100% - cela peut nécessiter quelques ajustements - mais cela donne l'idée générale de la façon d'obtenir le résultat souhaité.
EDIT
Pour répondre aux préoccupations énumérées dans les commentaires...
@pkr298 - Oui, STR ne fonctionne que sur les nombres... Le champ de l'OP est un ID... donc un nombre seulement.
@Desolator - Bien sûr, cela ne fonctionnera pas... le premier paramètre est composé de 6 caractères. Vous pouvez faire quelque chose comme :
SELECT REPLACE(STR(id,
(SELECT LEN(MAX(id)) + 4 FROM tableA)), SPACE(1), '0') AS [padded_id] FROM tableA
ceci devrait théoriquement déplacer les poteaux de but... comme le nombre devient plus grand il devrait TOUJOURS fonctionner.... indépendamment de si c'est 1 ou 123456789....
Ainsi, si votre valeur maximale est 123456... vous verrez 0000123456 et si votre valeur minimale est 1, vous verrez 0000000001.
STR() ne fonctionne que sur les nombres (ou les nombres dans les champs de type chaîne). Ce code ne fonctionne pas si vous l'utilisez sur un champ Varchar que vous supposez contenir un nombre, mais qu'un des enregistrements contient des données incorrectes (non numériques). La fonction RIGHT() ne s'arrête pas dans ce cas.
La fonction STR() ne fonctionnera pas si le nombre est d'une longueur supérieure (par ex. STR(123456, 4)
retournera ****
Vieux poste, mais peut-être que cela aidera quelqu'un :
A compléter jusqu'à ce qu'il se retrouve avec 4 caractères non-blancs :
SELECT RIGHT ('0000'+COLUMNNAME, 4) FROM TABLENAME;
Pour compléter jusqu'à 10 :
SELECT RIGHT ('0000000000'+COLUMNNAME, 10) FROM TABLENAME;
Si la colonne est numérique convertissez-le d'abord en varchar avec ce code :
Select RIGHT('0000'+Convert(nvarchar(20), COLUMNNAME), 4)
From TABLENAME
Et pour compléter jusqu'à 10 avec un champ numérique :
SELECT RIGHT ('0000000000'+Convert(nvarchar(20), COLUMNNAME), 10) FROM TABLENAME;
@SilverM-A, il n'est pas utile d'ajouter des 0 avant un nombre, puisqu'ils seront de toute façon ignorés (0003 est 3 après tout). Ce que vous voulez probablement faire, c'est convertir ce nombre en une chaîne (varchar), puis utiliser l'instruction ci-dessus.
@SilverM-A, si c'est le cas, il suffit de le convertir en utilisant la commande "CAST" comme suit : SELECT RIGHT('0000000000'+CAST(COLUMNNAME AS VARCHAR), 10) FROM TABLENAME ; C'est ça ?
@MarceloMyara cela devrait faire partie de la réponse, pas seulement un commentaire. Je l'ai moi-même ajouté.
J'en avais besoin dans une fonction sur le serveur SQL et j'ai un peu modifié la réponse de Patrick.
declare @dossierId int = 123
declare @padded_id varchar(7)
set @padded_id = REPLACE(
SPACE(7 - LEN(@dossierId)) + convert(varchar(7), @dossierId),
SPACE(1),
'0')
SELECT @dossierId as '@dossierId'
,SPACE(LEN(@dossierId)) + convert(varchar(7)
,@dossierId) as withSpaces
,@padded_id as '@padded_id'
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.