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

Comment formater des nombres dans SQL Server

À partir de SQL Server 2012, vous pouvez formater des types numériques à l'aide de T-SQL FORMAT() une fonction. Cette fonction accepte trois arguments ; le nombre, le format et un argument "culture" facultatif.

Il renvoie une chaîne formatée de type nvarchar .

Le format est fourni sous forme de chaîne de format. Une chaîne de format définit comment la sortie doit être formatée.

Voici un exemple :

SELECT FORMAT(1, 'N');

Résultat :

1.00

Dans ce cas, j'ai utilisé N comme deuxième argument. Il s'agit du spécificateur de format numérique standard pour Number. Ce spécificateur de format particulier (N ) entraîne le formatage de la sortie avec des chiffres entiers et décimaux, des séparateurs de groupe et un séparateur décimal avec un signe négatif facultatif. Cet argument est insensible à la casse, donc soit N ou n ça va.

Décimales

Voici un autre exemple, cette fois en utilisant N1 pour préciser qu'on ne veut qu'une seule décimale :

SELECT FORMAT(1, 'N1');

Résultat :

1.0

Mais vous pouvez également augmenter le nombre de décimales :

SELECT FORMAT(1, 'N7');

Résultat :

1.0000000

Dans ces exemples, le 1 et 7 sont appelés spécificateurs de précision .

Les spécificateurs de précision sont facultatifs. Il peut s'agir d'une valeur comprise entre 0 et 99, qui spécifie la précision du résultat. Son fonctionnement dépend du spécificateur de format utilisé. Pour certains spécificateurs de format, il spécifiera le nombre total de chiffres dans le résultat, pour d'autres, il spécifiera le nombre de décimales. Dans d'autres cas, il sera complètement ignoré. Consultez la liste complète des spécificateurs de format numérique standard pour voir comment les spécificateurs de précision affectent la sortie de chaque spécificateur de format.

Pourcentage

Les exemples suivants utilisent le P argument, qui formate le nombre en pourcentage. Il multiplie le nombre par 100, puis ajoute un signe de pourcentage localisé.

SELECT 
    FORMAT(1, 'P') AS 'Example 1', 
    FORMAT(.375, 'P') AS 'Example 2', 
    FORMAT(.0375, 'P', 'tr-tr') AS 'Example 3';

Résultat :

Example 1  Example 2  Example 3
---------  ---------  ---------
100.00 %   37.50 %    %3,75   

Notez que "l'exemple 3" inclut un troisième argument, qui spécifie la culture à utiliser dans la sortie. Dans ce cas, j'utilise tr-tr pour le turc. Il en résulte que le signe de pourcentage est ajouté au début du nombre (au lieu d'être ajouté, comme les autres). Cela entraîne également l'utilisation d'une virgule comme séparateur décimal.

Si vous ne fournissez pas l'argument "culture", la langue de la session en cours est utilisée.

Comme vous pouvez l'imaginer, vous pourriez obtenir des résultats assez différents en fonction de votre langue actuelle ou de la valeur de tout argument de « culture ». Voir Comment les paramètres de langue peuvent affecter vos résultats FORMAT() pour plus d'exemples.

Devise

Vous pouvez utiliser C pour renvoyer une valeur monétaire.

SELECT FORMAT(1, 'C');

Résultat :

$1.00

Vous pouvez également ajouter les paramètres régionaux en tant que troisième paramètre.

Voici quelques exemples :

SELECT 
    FORMAT(1, 'C', 'fr-FR') AS France, 
    FORMAT(1, 'C', 'th-TH') AS Thailand, 
    FORMAT(1, 'C', 'ja-JP') AS Japan;

Résultat :

France  Thailand  Japan
------  --------  -----
1,00 €  ฿1.00     ¥1   

Exponentielle (Scientifique)

Vous pouvez utiliser E pour spécifier la notation exponentielle.

SELECT FORMAT(1234.56789, 'E');

Résultat :

1.234568E+003  

Hexadécimal

Vous pouvez même formater un nombre en hexadécimal. Pour cela, utilisez le X argument :

SELECT FORMAT(10, 'X');

Résultat :

A

L'hexadécimal est en base 16. Par conséquent, le décompte va de 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F avant de recommencer (par exemple, 10 en hexadécimal est l'équivalent de 16 en décimal, et 11 est l'équivalent de 17, etc.). C'est pourquoi l'exemple ici donne A , car en hexadécimal, A vient après 9 .

Voici un autre exemple, cette fois avec un nombre plus grand :

SELECT FORMAT(7145, 'X');

Résultat :

1BE9

Format personnalisé

Vous pouvez également créer votre propre format personnalisé en utilisant une chaîne de format numérique personnalisée. Il s'agit d'une série de spécificateurs de format numérique personnalisés qui fournissent un modèle pour votre numéro.

Ceci est plus facile à expliquer avec un exemple :

SELECT FORMAT(123456789, '##-###-####');

Résultat :

12-345-6789

Dans ce cas, j'utilise l'espace réservé numérique (# ). L'espace réservé numérique me permet de spécifier un format pour le nombre, en utilisant le # symbole comme espace réservé pour chaque numéro.

Les virgules

Autre exemple :

SELECT FORMAT(123456789, '#,#');

Résultat :

123,456,789

Zéros non significatifs

Un autre spécificateur de format numérique personnalisé est zéro (0 ). Vous pouvez l'utiliser pour compléter un nombre avec des zéros non significatifs :

SELECT
    FORMAT(7, '000') AS 'Example 1',
    FORMAT(123, '0000') AS 'Example 2',
    FORMAT(123, '00000') AS 'Example 3';

Résultat :

Example 1  Example 2  Example 3
---------  ---------  ---------
007        0123       00123    

Vous pouvez également l'utiliser pour supprimer les zéros :

SELECT 
    FORMAT(0123, '000') AS 'Example 1',
    FORMAT(0123, '0000') AS 'Example 2',
    FORMAT(000123, '00000') AS 'Example 3';

Résultat :

Example 1  Example 2  Example 3
---------  ---------  ---------
123        0123       00123    

Référence des spécificateurs de format numérique

Les articles suivants contiennent tous les spécificateurs de format numérique que vous pouvez utiliser avec le FORMAT() fonction, ainsi que des exemples T-SQL.

  • Chaînes de format numérique standard
  • Chaînes de format numérique personnalisées

Ce sont les mêmes spécificateurs de format qui sont pris en charge par le .NET Framework (le FORMAT() s'appuie sur le .NET Framework).

Date et heure

Le FORMAT() La fonction vous permet également de formater la date et l'heure.

La date et l'heure ont un ensemble distinct de spécificateurs de format :

  • Chaînes de format de date et d'heure standard
  • Chaînes de format de date et d'heure personnalisées