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

Chaînes de format de date/heure personnalisées prises en charge par FORMAT() dans SQL Server

Cet article fournit une référence pour les spécificateurs de format de date et d'heure personnalisés qui peuvent être utilisés lors du formatage des dates et/ou des heures à l'aide de FORMAT() fonction dans SQL Server, ainsi que des exemples.

Vous pouvez combiner n'importe lequel de ces spécificateurs de format pour produire une chaîne de format personnalisée. Voir ci-dessous pour un exemple de code et une explication sur le fonctionnement des chaînes de format personnalisées.

Les exemples du tableau supposent un datetimeoffset valeur de 2080-05-01 23:09:08.1234567 +07:00 .

Formater la chaîne Description Exemple
d Le jour du mois, de 1 à 31. 1
dd Le jour du mois, du 01 au 31. 01
ddd Le nom abrégé du jour de la semaine. Mer
dddd Le nom complet du jour de la semaine. Mercredi
f Les dixièmes de seconde dans une valeur de date et d'heure. 1
ff Les centièmes de seconde dans une valeur de date et d'heure. 12
fff Les millisecondes dans une valeur de date et d'heure. 123
ffff Les dix millièmes de seconde dans une valeur de date et d'heure. 1234
fffff Les cent millièmes de seconde dans une valeur de date et d'heure. 12345
fffffff Les millionièmes de seconde dans une valeur de date et d'heure. 123456
fffffff Les dix millionièmes de seconde dans une valeur de date et d'heure. 1234567
F Si différent de zéro, les dixièmes de seconde dans une valeur de date et d'heure. 1
FF Si différent de zéro, les centièmes de seconde dans une valeur de date et d'heure. 12
FFF Si différent de zéro, les millisecondes dans une valeur de date et d'heure. 123
FFFF Si différent de zéro, les dix millièmes de seconde dans une valeur de date et d'heure. 1234
FFFFF Si différent de zéro, les cent millièmes de seconde dans une valeur de date et d'heure. 12345
FFFFFF Si différent de zéro, les millionièmes de seconde dans une valeur de date et d'heure. 123456
FFFFFFF Si différent de zéro, les dix millionièmes de seconde dans une valeur de date et d'heure. 1234567
g La période ou l'ère. A.D.
gg La période ou l'ère. A.D.
h L'heure, en utilisant une horloge de 12 heures de 1 à 12. 11
hh L'heure, en utilisant une horloge de 12 heures de 01 à 12. 11
H L'heure, en utilisant une horloge de 24 heures de 0 à 23. 23
HH L'heure, en utilisant une horloge de 24 heures de 00 à 23. 23
K Informations sur le fuseau horaire. +07:00
m La minute, de 0 à 59. 9
mm La minute, de 00 à 59. 09
M Le mois, de 1 à 12. 5
MM Le mois, de 01 à 12. 05
MMM Le nom abrégé du mois. Mai
MMMM Le nom complet du mois. Mai
s La seconde, de 0 à 59. 8
ss La seconde, de 00 à 59. 08
t Le premier caractère de l'indicateur AM/PM. P
tt L'indicateur AM/PM. MP
y L'année, de 0 à 99. 80
yy L'année, de 00 à 99. 80
yyy L'année, avec un minimum de trois chiffres. 2080
yyyy L'année sous la forme d'un nombre à quatre chiffres. 2080
yyyyy L'année sous la forme d'un nombre à cinq chiffres. 02080
z Décalage des heures par rapport à UTC, sans zéros non significatifs. +7
zz Décalage des heures par rapport à UTC, avec un zéro non significatif pour une valeur à un chiffre. +07
zzz Heures et minutes décalées par rapport à UTC. +07:00
: Le séparateur de temps.  :
/ Le séparateur de date. /
"string" Délimiteur de chaîne littérale. chaîne
% Définit le caractère suivant comme spécificateur de format personnalisé.
\ Le caractère d'échappement.

Tout autre caractère est copié dans la chaîne de résultat sans modification.

Important : Lorsque vous utilisez une chaîne de format personnalisé à un seul caractère, vous devez la faire précéder du signe de pourcentage (% ). Alternativement, vous pouvez ajouter un espace. Si vous ne le faites pas, vous obtiendrez soit NULL, soit le spécificateur de format pourrait être interprété comme un spécificateur de format standard, et vous obtiendrez des résultats inattendus.

Que sont les chaînes de format personnalisées ?

Une chaîne de format personnalisée se compose d'un ou plusieurs spécificateurs de format personnalisés. Le tableau ci-dessus répertorie les spécificateurs de format personnalisés disponibles pour formater les valeurs de date et d'heure dans une chaîne.

Il existe également des chaînes de format de date et d'heure standard. Chacun d'eux est un alias pour une chaîne de format personnalisé. Les chaînes de format standard consistent en un seul spécificateur de format, elles sont donc plus rapides à utiliser (mais moins flexibles que les chaînes de format personnalisées).

Toute chaîne de format qui n'est pas une chaîne de format de date et d'heure standard est interprétée comme une chaîne de format de date et d'heure personnalisée.

Exemple d'utilisation

La façon dont les spécificateurs de format personnalisés fonctionnent est que vous pouvez les combiner pour former une chaîne de format personnalisée lors de l'utilisation de FORMAT() une fonction. Cela détermine la façon dont le résultat est formaté.

Voici quelques exemples :

DECLARE @date datetimeoffset;
SET @date = '2080-05-01 23:09:08.1234567 +07:00';
SELECT 
  FORMAT(@date, 'd, MMM yy') AS 'd, MMM yy',
  FORMAT(@date, 'dd, MMMM yyyy') AS 'dd, MMMM yyyy',
  FORMAT(@date, 'dddd, MMM dd yyyy') AS 'dddd, MMM dd yyyy',
  FORMAT(@date, 'hh:mm:ss') AS 'hh:mm:ss',
  FORMAT(@date, 'hh:mm tt') AS 'hh:mm tt';

Résultat :

+-------------+-----------------+------------------------+------------+------------+
| d, MMM yy   | dd, MMMM yyyy   | dddd, MMM dd yyyy      | hh:mm:ss   | hh:mm tt   |
|-------------+-----------------+------------------------+------------+------------|
| 1, May 80   | 01, May 2080    | Wednesday, May 01 2080 | 11:09:08   | 11:09 PM   |
+-------------+-----------------+------------------------+------------+------------+

Cela permet donc une grande flexibilité dans la façon dont vous présentez vos dates et heures.

Voici un exemple d'utilisation d'une chaîne de format constituée d'un seul spécificateur de format.

DECLARE @date datetimeoffset;
SET @date = '2080-05-01 23:09:08.1234567 +07:00';
SELECT 
  FORMAT(@date, '%d') AS '%d',
  FORMAT(@date, '%M') AS '%M',
  FORMAT(@date, '%K') AS '%K',
  FORMAT(@date, '%z') AS '%z';

Résultat :

+------+------+--------+------+
| %d   | %M   | %K     | %z   |
|------+------+--------+------|
| 1    | 5    | +07:00 | +7   |
+------+------+--------+------+

Comme mentionné, vous devez les faire précéder d'un signe de pourcentage pour éviter d'obtenir NULL et pour que le spécificateur de format ne soit pas interprété par inadvertance comme une chaîne de format standard.

Voici ce qui se passe si je supprime le signe de pourcentage de l'exemple précédent :

DECLARE @date datetimeoffset;
SET @date = '2080-05-01 23:09:08.1234567 +07:00';
SELECT 
  FORMAT(@date, 'd') AS 'd',
  FORMAT(@date, 'M') AS 'M',
  FORMAT(@date, 'K') AS 'K',
  FORMAT(@date, 'z') AS 'z';

Résultat :

+----------+-------+------+------+
| d        | M     | K    | z    |
|----------+-------+------+------|
| 5/1/2080 | May 1 | NULL | NULL |
+----------+-------+------+------+

Nous obtenons un résultat complètement différent.