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

Ajouter des zéros de début et de fin dans SQL Server

Certains SGBD ont un LPAD() et RPAD() fonction qui peut être utilisée pour compléter les nombres avec des zéros de début et de fin.

SQL Server n'a pas une telle fonction. Mais cela ne nous empêche pas de pouvoir compléter les nombres avec des zéros de tête/de fin.

Non entiers

Examinons d'abord les nombres non entiers :

SELECT 
    FORMAT(7, '000.00') AS "1",
    FORMAT(17, '000.00') AS "2",
    FORMAT(73.5, '000.00') AS "3";

Résultat :

+--------+--------+--------+
| 1      | 2      | 3      |
|--------+--------+--------|
| 007.00 | 017.00 | 073.50 |
+--------+--------+--------+

Ici, nous utilisons le FORMAT() fonction pour formater le nombre. Le premier argument est le nombre et le deuxième argument est la chaîne de format. La fonction affiche son résultat sous la forme d'une chaîne formatée.

Dans l'exemple ci-dessus, la chaîne de format se compose de spécificateurs de format numériques personnalisés qui entraînent l'ajout de zéros au nombre d'origine aux endroits où il n'y a pas de chiffre dans le nombre d'origine. Nous pouvons utiliser autant de zéros dans la chaîne de format que nécessaire.

SELECT 
    FORMAT(7, '00000.0000') AS "1",
    FORMAT(17, '00000.0000') AS "2",
    FORMAT(73.5, '00000.0000') AS "3";

Résultat :

+------------+------------+------------+
| 1          | 2          | 3          |
|------------+------------+------------|
| 00007.0000 | 00017.0000 | 00073.5000 |
+------------+------------+------------+

Entiers

Si le nombre d'origine est un entier, nous devons faire un peu plus de travail :

SELECT 
    REPLACE(FORMAT(7, '00000.0000', 'en-US'), '.', '') AS "1",
    REPLACE(FORMAT(17, '00000.0000', 'en-US'), '.', '') AS "2",
    REPLACE(FORMAT(73.5, '00000.0000', 'en-US'), '.', '') AS "3";

Résultat :

+-----------+-----------+-----------+
| 1         | 2         | 3         |
|-----------+-----------+-----------|
| 000070000 | 000170000 | 000735000 |
+-----------+-----------+-----------+

Ici, j'ai utilisé le REPLACE() fonction pour supprimer la virgule décimale après que le nombre a été formaté avec elle.

J'ai explicitement utilisé en-US comme troisième argument (facultatif) pour s'assurer que le séparateur décimal est un point/point, et non un autre caractère, comme une virgule. Certaines locales utilisent une virgule comme séparateur décimal. Si nous ne spécifions pas explicitement les paramètres régionaux dans la fonction, les paramètres régionaux de la session en cours sont utilisés. La spécification explicite des paramètres régionaux à partir de la fonction garantit que les paramètres régionaux de la session en cours ne sont pas utilisés et, par conséquent, ne peuvent pas interférer avec notre opération de remplacement.

Azure SQL Bord

Azure SQL Edge repose sur une implémentation limitée du moteur de base de données SQL Server et prend donc en charge la plupart des fonctions T-SQL que nous pouvons utiliser avec SQL Server. Cependant, au moment de la rédaction, SQL Edge ne prend pas en charge le T-SQL FORMAT() fonction.

Consultez Comment ajouter des zéros de début et de fin dans Azure SQL Edge pour une méthode alternative (qui fonctionne également dans SQL Server).