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

Qu'est-ce qu'une chaîne de format dans SQL Server ?

Dans SQL Server, le FORMAT() La fonction vous permet de formater les valeurs de date/heure et de nombre comme une chaîne formatée en passant une "chaîne de format" comme deuxième argument (le premier argument est la valeur qui est formatée).

Voici un exemple de cette fonction en action :

FORMAT(@date, 'dd/MM/yyyy');

Dans ce cas, la chaîne de format est jj/MM/aaaa .

Cette chaîne de format particulière spécifie que le @date La valeur doit être formatée avec un jour à deux chiffres, un mois à deux chiffres et une année à quatre chiffres, dans cet ordre, et avec des barres obliques comme séparateurs.

Cela donnerait quelque chose comme ceci :

21/05/2019

Une chaîne de format est une chaîne qui contient un ou plusieurs spécificateurs de format prédéfinis , qui sont des caractères uniques ou des groupes de caractères qui définissent la façon dont la sortie doit être formatée.

SQL Server n'accepte que les chaînes de format prises en charge par le .NET Framework.

Une chaîne de format peut être une chaîne de format standard ou une chaîne de format personnalisée. Voici comment cela fonctionne :

  • Une chaîne de format standard est une chaîne de format prédéfinie. Il contient un seul spécificateur de format qui est interprété comme représentant un certain format prédéfini. Les chaînes de format standard sont en fait des alias pour les chaînes de format personnalisées. Cependant, la chaîne de format personnalisée réelle utilisée dépendra souvent de la culture.
  • Une chaîne de format personnalisée d'autre part, se compose d'un ou plusieurs spécificateurs de format personnalisés qui, en combinaison les uns avec les autres, définiront le format. Cela vous offre beaucoup plus de flexibilité pour définir l'apparence de la sortie.

Exemple 1 - Chaîne de format standard

Voici un exemple pour illustrer le fonctionnement des chaînes de format standard.

SELECT FORMAT(1234, 'C') AS Result;

Résultat :

+-----------+
| Result    |
|-----------|
| $1,234.00 |
+-----------+

Dans cet exemple, C est la chaîne de format. Dans ce cas, il s'agit d'une chaîne de format numérique standard composée d'un seul spécificateur de format. Ce spécificateur de format particulier est utilisé pour représenter un montant en devise.

Nous pourrions également obtenir le même résultat en utilisant une chaîne de format numérique personnalisée.

Exemple 2 – Chaîne de format personnalisée

Cet exemple produit la même sortie que l'exemple précédent. La différence est que, dans cet exemple, j'utilise un personnalisé chaîne de format au lieu d'une chaîne standard.

SELECT FORMAT(1234, '$#,###.00') AS Result;

Résultat :

+-----------+
| Result    |
|-----------|
| $1,234.00 |
+-----------+

Une chaîne de format personnalisée vous permet de créer votre propre format personnalisé. Vous pouvez combiner des chaînes avec des spécificateurs de format pour créer votre propre format personnalisé.

Dans cet exemple, j'utilise le # spécificateur de format, qui est un espace réservé pour un chiffre. Si un chiffre n'est pas présent, aucun chiffre n'apparaît dans la chaîne résultante.

J'utilise aussi le 0 spécificateur de format, qui est également un espace réservé pour n'importe quel chiffre. Mais dans ce cas, si un chiffre n'est pas présent, un zéro est utilisé à la place.

J'inclus également le $ , , , et . chaînes littérales dans la chaîne de format. Ceux-ci sont inclus dans la sortie exactement tels qu'ils sont.

Si nous réduisons le nombre d'entrées, nous pouvons voir comment le résultat est différent entre le 0 et # les spécificateurs de format et comment ils se comparent au C spécificateur de format standard de l'exemple précédent :

SELECT 
  FORMAT(34, 'C') AS 'C',
  FORMAT(34, '$0,000.00') AS '0',
  FORMAT(34, '$#,###.00') AS '#';

Résultat :

+--------+-----------+--------+
| C      | 0         | #      |
|--------+-----------+--------|
| $34.00 | $0,034.00 | $34.00 |
+--------+-----------+--------+

Comme vous pouvez l'imaginer, les chaînes de format personnalisées offrent beaucoup plus de flexibilité que les chaînes de format standard.

Cependant, il existe de nombreux scénarios où les chaînes de format standard peuvent être plus puissantes, en particulier lorsqu'il s'agit de produire des résultats dynamiques qui tiennent compte de la culture. Plus sur la culture bientôt.

Exemple 3 - Formatage de la date et de l'heure

Les valeurs de date/heure offrent également le choix de chaînes de format standard ou personnalisées. Voici un exemple de valeur de date/heure formatée avec une chaîne de format standard, ainsi que certaines chaînes de format personnalisées.

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'd') AS 'd',
  FORMAT(@date, 'M/d/yyyy') AS 'M/d/yyyy',
  FORMAT(@date, 'dd/MM/yy') AS 'dd/MM/yy',
  FORMAT(@date, 'ddd, MMM dd, yy') AS 'ddd, MMM dd, yy',
  FORMAT(@date, 'dddd, dd MMMM yyyy') AS 'dddd, dd MMMM yyyy';

Résultat :

+----------+------------+------------+-------------------+------------------------+
| d        | M/d/yyyy   | dd/MM/yy   | ddd, MMM dd, yy   | dddd, dd MMMM yyyy     |
|----------+------------+------------+-------------------+------------------------|
| 5/1/2080 | 5/1/2080   | 01/05/80   | Wed, May 01, 80   | Wednesday, 01 May 2080 |
+----------+------------+------------+-------------------+------------------------+

Le premier utilise une chaîne de format standard et les quatre autres utilisent des chaînes de format personnalisées.

Pour une liste complète des chaînes de format de date et d'heure disponibles, consultez ce qui suit :

  • Liste des chaînes de format de date/heure standard
  • Liste des chaînes de format de date/heure personnalisées

Exemple 4 – Culture

Les résultats des chaînes de format peuvent parfois dépendre de la culture utilisée. Par exemple, aux États-Unis, un format de date court est représenté par "M/j/aaaa", mais en Grande-Bretagne, il est représenté par "jj/MM/aaaa".

Par défaut, la langue de la session en cours est utilisée pour définir la culture. Cependant, le FORMAT() La fonction vous permet de remplacer cela.

La syntaxe de la fonction ressemble à ceci :

FORMAT ( value, format [, culture ] )

Cela vous permet donc de spécifier une culture comme argument facultatif.

Voici un exemple où différentes cultures peuvent aboutir à une seule chaîne de format produisant un certain nombre de formats différents.

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'd', 'en-us') AS 'US English',
  FORMAT(@date, 'd', 'en-gb') AS 'British',
  FORMAT(@date, 'd', 'de-de') AS 'German',
  FORMAT(@date, 'd', 'jp-jp') AS 'Japanese';

Résultat :

+--------------+------------+------------+------------+
| US English   | British    | German     | Japanese   |
|--------------+------------+------------+------------|
| 5/1/2080     | 01/05/2080 | 01.05.2080 | 05/01/2080 |
+--------------+------------+------------+------------+

Dans ce cas, les quatre pays utilisent le d chaîne de format de date et d'heure standard. Cependant, ils utilisent tous un argument culturel différent. Cela produit un résultat différent en fonction de chaque culture.

Et ce n'est pas seulement standard chaînes de format qui sont influencées par la culture. La culture peut également influencer le résultat de la personnalisation formater les chaînes. Voici un exemple :

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'dddd, dd MMMM', 'en-us') AS 'US English',
  FORMAT(@date, 'dddd, dd MMMM', 'de-de') AS 'German',
  FORMAT(@date, 'dddd, dd MMMM', 'vi') AS 'Vietnamese',
  FORMAT(@date, 'dddd, dd MMMM', 'sv') AS 'Swedish';

Résultat :

+-------------------+------------------+----------------------+----------------+
| US English        | German           | Vietnamese           | Swedish        |
|-------------------+------------------+----------------------+----------------|
| Wednesday, 01 May | Mittwoch, 01 Mai | Thứ Tư, 01 Tháng Năm | onsdag, 01 maj |
+-------------------+------------------+----------------------+----------------+

Vous avez également la possibilité d'utiliser la culture invariante (iv ). La culture invariante est insensible à la culture. Il est associé à la langue anglaise mais pas à un pays/une région. Pour plus d'informations et d'exemples, consultez Comment spécifier la culture invariante lors de l'utilisation de FORMAT() dans SQL Server.