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

Comment formater des nombres avec des virgules dans SQL Server

SQL Server nous offre un moyen rapide et facile de formater des nombres avec des virgules insérées à l'endroit approprié. Par exemple, 1234.56 peut devenir 1 234,56 . Ou il peut devenir 1.234,56 , s'il s'agit des paramètres régionaux que vous utilisez.

Exemple

Nous pouvons utiliser le FORMAT() fonction pour formater les nombres avec des virgules. Lorsque nous utilisons cette fonction, nous transmettons le nombre et une chaîne de format. La chaîne de format détermine comment le nombre sera formaté lorsqu'il sera renvoyé.

Le FORMAT() La fonction renvoie une représentation sous forme de chaîne formatée du nombre, basée sur les valeurs que nous fournissons.

Voici un exemple pour illustrer :

SELECT 
    FORMAT(123456.789, 'N') AS "Number",
    FORMAT(123456.789, 'P') AS "Percent",
    FORMAT(123456.789, 'C') AS "Currency";

Résultat :

+------------+----------------+-------------+
| Number     | Percent        | Currency    |
|------------+----------------+-------------|
| 123,456.79 | 12,345,678.90% | $123,456.79 |
+------------+----------------+-------------+

Cet exemple illustre trois des chaînes de format numérique standard :

  • Si nous voulons juste le nombre formaté, nous pouvons utiliser N
  • Si nous voulons qu'il soit formaté en pourcentage, nous pouvons utiliser P
  • Pour la devise, nous pouvons utiliser C .

SQL Server est suffisamment intelligent pour connaître vos paramètres régionaux actuels (basés sur la langue de la session en cours) et formate le résultat en fonction des conventions de ces paramètres régionaux. Ceci est important, car tout le monde ne vit pas dans un pays qui utilise une virgule comme séparateur de milliers et un point comme séparateur décimal .

De plus, le FORMAT() La fonction accepte un troisième argument "culture" facultatif, qui vous permet de spécifier explicitement les paramètres régionaux.

Voici un exemple de ce que je veux dire :

SELECT 
    FORMAT(123456.789, 'N', 'de-de') AS "Number",
    FORMAT(123456.789, 'P', 'de-de') AS "Percent",
    FORMAT(123456.789, 'C', 'de-de') AS "Currency";

Résultat :

+------------+-----------------+--------------+
| Number     | Percent         | Currency     |
|------------+-----------------+--------------|
| 123.456,79 | 12.345.678,90 % | 123.456,79 € |
+------------+-----------------+--------------+

Dans ce cas je précise de-de que la culture, ce qui signifie que les résultats seront formatés selon les conventions allemandes. Nous pouvons voir que les points sont utilisés comme séparateur de groupe, et une virgule est utilisée pour le séparateur décimal .

Si le troisième argument est omis, la langue de la session en cours est utilisée.

Chaînes de format personnalisées

Il est également possible d'utiliser des spécificateurs de format personnalisés pour créer vos propres chaînes de format personnalisées. Par exemple, le # caractère est un caractère fictif, le 0 est un espace réservé zéro, la virgule (, ) est un espace réservé pour le séparateur de groupe et le point (. ) est un espace réservé pour le séparateur décimal .

Cela est vrai quelle que soit la locale utilisée - SQL Server déterminera les caractères à utiliser pour le groupe et les séparateurs décimaux en fonction de la locale actuelle.

Exemple :

SELECT 
    FORMAT(123456.789, '###,###,###.##', 'en-us') AS "US English",
    FORMAT(123456.789, '###,###,###.##', 'de-de') AS "German";

Résultat :

+--------------+------------+
| US English   | German     |
|--------------+------------|
| 123,456.79   | 123.456,79 |
+--------------+------------+

Dans les deux cas, j'ai utilisé la même chaîne de format, mais SQL Server a renvoyé le groupe et les séparateurs décimaux applicables aux paramètres régionaux spécifiés (qui ont été spécifiés avec le troisième argument "culture").

Dans l'exemple ci-dessus, la chaîne de format comprend plus de chiffres que le nombre réel. Quoi qu'il en soit, SQL Server a choisi de ne renvoyer aucun zéro non significatif. C'est parce que nous avons utilisé le # spécificateur de format.

Si nous voulons que SQL Server renvoie des zéros non significatifs, nous pouvons utiliser le 0 spécificateur de format :

SELECT 
    FORMAT(123456.789, '000,000,000.00', 'en-us') AS "US English",
    FORMAT(123456.789, '000,000,000.00', 'de-de') AS "German";

Résultat :

+----------------+----------------+
| US English     | German         |
|----------------+----------------|
| 000,123,456.79 | 000.123.456,79 |
+----------------+----------------+