Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Remplissage gauche dans SQL Server - 3 équivalents LPAD ()

Si vous utilisez Oracle Database ou MySQL, vous avez la chance d'avoir le LPAD() et RPAD() fonctions, qui vous permettent de remplir une chaîne avec un caractère (ou des caractères) donné à sa gauche et/ou à sa droite.

Cependant, SQL Server (ou plus précisément, T-SQL), n'inclut pas ces fonctions. Donc, si vous avez besoin d'un rembourrage gauche, vous devrez improviser.

Cet article présente quatre options pour remplir un nombre avec des zéros non significatifs dans SQL Server. Ainsi, vous pouvez faire des choses comme tourner 7 en 007 . Trois de ces options fonctionnent sur des chaînes, vous pouvez donc également appliquer un rembourrage aux données textuelles.

Méthode 1 - Utiliser la fonction FORMAT()

Si vous devez appliquer des zéros non significatifs à un nombre, cette option devrait être tout ce dont vous avez besoin. Cette option utilise le FORMAT() une fonction. Cette fonction renvoie le nombre sous forme de chaîne dans notre format spécifié :

SELECT FORMAT(7, '000');

Résultat :

007

Dans ce cas, nous utilisons le 0 spécificateur de format pour formater le nombre avec des zéros non significatifs, le cas échéant. Ce n'est qu'un des nombreux spécificateurs de format personnalisés. Les spécificateurs de format personnalisés nous permettent d'être très précis sur la façon dont notre numéro est formaté.

Notez que le FORMAT() la fonction est uniquement pour les nombres et les valeurs datetime. Donc, si vous avez besoin d'appliquer un rembourrage à une chaîne réelle, lisez la suite.

Méthode 2 - Utiliser la fonction RIGHT()

La deuxième méthode utilise le RIGHT() fonction pour renvoyer uniquement la partie la plus à droite de la chaîne, après avoir ajouté des zéros non significatifs.

Bien que j'applique ici des zéros non significatifs à un "nombre", il s'agit en fait d'une représentation sous forme de chaîne d'un nombre. Donc, si vous devez appliquer un rembourrage à une chaîne au lieu d'un nombre, cette méthode devrait fonctionner.

SELECT RIGHT('000' + '1234', 7);

Résultat :

0001234

Le 7 spécifie le nombre de caractères que doit contenir le résultat final (après l'ajout des zéros).

Réduire la longueur

Donc, si nous réduisons ce nombre, cela réduira le nombre de zéros non significatifs :

SELECT RIGHT('000' + '1234', 6);

Résultat :

001234

Augmenter la longueur

Mais si nous augmentons le nombre, nous devons nous assurer que nous avons spécifié suffisamment de zéros pour atteindre la longueur requise :

SELECT RIGHT('000000' + '1234', 10);

Résultat :

0000001234

Sinon on se retrouve avec ça :

SELECT RIGHT('000' + '1234', 10);

Résultat :

0001234

Réduire le nombre

Notez également que si vous ne spécifiez pas suffisamment de caractères pour la longueur de chaîne résultante, le nombre sera coupé et vous n'obtiendrez que la partie la plus à droite du nombre :

SELECT RIGHT('000' + '1234', 2);

Résultat :

34

Donc, dans ce cas, le nombre initial a été tronqué et les zéros non significatifs ont été ignorés.

Il s'agit d'un scénario où le résultat diffère de celui de MySQL et du LPAD() d'Oracle une fonction. Cette fonction aurait produit les 2 premiers chiffres (non rembourrés) au lieu des 2 derniers chiffres. Comme ceci :

SELECT LPAD(1234, 2, 0);

Résultat :

12

Si vous avez besoin d'une solution SQL Server qui se comportera comme LPAD() dans ce cas, essayez ceci :

SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);

Résultat :

12

Cependant, gardez à l'esprit que vous obtenez le même résultat en utilisant simplement le LEFT() fonctionner par lui-même :

SELECT LEFT('1234', 2);

Résultat :

12

De plus, j'ai du mal à trouver une raison pour laquelle quelqu'un veut réduire le nombre (considérant qu'il essaie de le compléter), mais au moins c'est quelque chose à considérer.

Méthode 3 - Utiliser 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 le REPLICATE() fonction :

SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);

Résultat :

0001234

Le REPLICATE() vous évite d'avoir à taper chaque zéro (ou autre caractère) plusieurs fois.

Méthode bonus :Méthode 4 - Utilisez 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('1234', 6),' ','0');

Résultat :

001234

Ici, nous utilisons le REPLACE() fonction en conjonction avec le STR() fonction pour convertir un nombre en une chaîne d'une longueur spécifique, puis convertir tous les espaces en zéro.

Une chose à laquelle il faut faire attention est que, si vous raccourcissez le nombre (comme nous l'avons fait dans un exemple précédent), vous vous retrouverez avec un tas d'astérisques au lieu du nombre (raccourci) :

SELECT REPLACE(STR('1234', 2),' ','0');

Résultat :

**