J'ai le tableau A suivant:
id
----
1
2
12
123
1234
J'ai besoin de remplir à gauche les id
valeurs avec des zéros:
id
----
0001
0002
0012
0123
1234
Comment puis-je atteindre cet objectif?
Je crois que c'est peut-être ce que vous recherchez:
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
ou
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
Je n'ai pas testé la syntaxe sur le 2ème exemple. Je ne sais pas si cela fonctionne à 100% - cela peut nécessiter quelques ajustements - mais cela donne l'idée générale de la façon d'obtenir la sortie souhaitée.
ÉDITER
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 uniquement un nombre.
@Desolator - Bien sûr, cela ne fonctionnera pas ... le premier paramètre contient 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
cela devrait théoriquement déplacer les poteaux de but ... au fur et à mesure que le nombre augmente, il devrait TOUJOURS fonctionner .... peu importe si c'est 1 ou 123456789 ...
Donc, si votre valeur maximale est 123456 ... vous verrez 0000123456 et si votre valeur minimale est 1, vous verrez 0000000001
STR(123456, 4)
, retournera****
SQL Server prend désormais en charge la fonction FORMAT à partir de la version 2012, donc:
fera l'affaire.
Si votre identifiant ou votre colonne est dans a
varchar
et représente un nombre que vous convertissez en premier:la source
Résultat
la source
Ancien message, mais peut-être que cela aide quelqu'un:
Pour terminer jusqu'à ce qu'il se termine par 4 caractères non vides:
Pour terminer jusqu'à 10:
Dans le cas où la colonne est numérique , convertissez-la d'abord en varchar avec un tel code:
Et pour terminer jusqu'à 10 avec un champ numérique:
la source
Essaye ça:
la source
- Veuillez les examiner.
- J'espère que cela vous aidera
la source
Cela fonctionne pour les chaînes, les entiers et les nombres:
SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)
Où
4
est la longueur souhaitée. Fonctionne pour les nombres de plus de 4 chiffres, renvoie une chaîne vide sur laNULL
valeur.la source
Si quelqu'un est toujours intéressé, j'ai trouvé cet article sur DATABASE.GUIDE:
Left Padding in SQL Server - 3 LPAD () Equivalents
En bref, il existe 3 méthodes mentionnées dans cet article.
Disons que votre id = 12 et que vous en avez besoin pour s'afficher sous la forme 0012.
Méthode 1 - Utilisez la fonction RIGHT ()
La première méthode utilise la fonction RIGHT () pour renvoyer uniquement la partie la plus à droite de la chaîne, après avoir ajouté quelques zéros non significatifs.
SELECT RIGHT('00' + '12', 4);
Résultat:
0012
Méthode 2 - Utilisez une combinaison de RIGHT () et REPLICATE ()
Cette méthode est presque la même que la méthode précédente, à la seule différence que je remplace simplement les trois zéros par la fonction REPLICATE ():
SELECT RIGHT(REPLICATE('0', 2) + '12', 4);
Résultat:
0012
Méthode 3 - Utiliser une combinaison de REPLACE () et STR ()
Cette méthode vient d'un angle complètement différent des méthodes précédentes:
SELECT REPLACE(STR('12', 4),' ','0');
Résultat:
0012
Consultez l'article, il y a une analyse plus approfondie avec des exemples.
la source
C'est ce que j'utilise normalement lorsque j'ai besoin de compléter une valeur.
la source
J'en avais besoin dans une fonction sur le serveur SQL et j'ai ajusté un peu la réponse de Patrick.
la source
Créer une fonction:
Exemple:
la source
SELECT @var = LTRIM(RTRIM(@Text))
J'ai créé une fonction:
Utilisation: sélectionnez dbo.fnPadLeft (123, 10)
Renvoie: 0000000123
la source
Quelque chose d'assez conforme ODBC si nécessaire peut être le suivant:
Ceci repose sur le fait que la quantité de chiffres pour un nombre en base 10 peut être trouvée par la composante intégrale de son journal. De cela, nous pouvons le soustraire de la largeur de remplissage souhaitée. Repeat retournera
null
pour les valeurs inférieures à 1, nous en avons donc besoinifnull
.la source
Ma solution n'est pas efficace mais m'a aidé dans une situation où les valeurs (numéros de chèque bancaire et numéro de virement bancaire) étaient stockées en tant que varchar où certaines entrées avaient des valeurs alphanumériques avec elles et je devais compléter si la longueur est inférieure à 6 caractères.
Pensé pour partager si quelqu'un rencontre la même situation
la source
Un exemple simple serait
la source
J'ai créé une fonction pour ce faire, où vous pouvez spécifier la longueur de caractère de sortie souhaitée:
Exemple de résultats
la source
Un moyen plus efficace est:
la source