Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Stringhe di formato data/ora personalizzate supportate da FORMAT() in SQL Server

Questo articolo fornisce un riferimento per gli identificatori di formato di data e ora personalizzati che possono essere utilizzati durante la formattazione di date e/o ore utilizzando FORMAT() funzione in SQL Server, insieme agli esempi.

È possibile combinare uno qualsiasi di questi identificatori di formato per produrre una stringa di formato personalizzata. Vedi sotto per un esempio di codice e una spiegazione su come funzionano le stringhe di formato personalizzato.

Gli esempi nella tabella presuppongono un datetimeoffset valore di 2080-05-01 23:09:08.1234567 +07:00 .

Formatta stringa Descrizione Esempio
d Il giorno del mese, da 1 a 31. 1
dd Il giorno del mese, dall'01 al 31. 01
ddd Il nome abbreviato del giorno della settimana. Mer
dddd Il nome completo del giorno della settimana. Mercoledì
f I decimi di secondo in un valore di data e ora. 1
ff I centesimi di secondo in un valore di data e ora. 12
fff I millisecondi in un valore di data e ora. 123
ffff I dieci millesimi di secondo in un valore di data e ora. 1234
fffff I centomillesimi di secondo in un valore di data e ora. 12345
fffffff I milionesimi di secondo in un valore di data e ora. 123456
fffffff I dieci milionesimi di secondo in un valore di data e ora. 1234567
F Se diverso da zero, i decimi di secondo in un valore di data e ora. 1
FF Se diverso da zero, i centesimi di secondo in un valore di data e ora. 12
FFF Se diverso da zero, i millisecondi in un valore di data e ora. 123
FFFF Se diverso da zero, i dieci millesimi di secondo in un valore di data e ora. 1234
FFFFF Se diverso da zero, i centomillesimi di secondo in un valore di data e ora. 12345
FFFFFF Se diverso da zero, i milionesimi di secondo in un valore di data e ora. 123456
FFFFFFF Se diverso da zero, i dieci milionesimi di secondo in un valore di data e ora. 1234567
g Il periodo o l'era. d.C.
gg Il periodo o l'era. d.C.
h L'ora, utilizzando un formato di 12 ore dall'1 al 12. 11
hh L'ora, utilizzando un formato di 12 ore dalle 01 alle 12. 11
H L'ora, utilizzando un formato 24 ore da 0 a 23. 23
HH L'ora, utilizzando un formato 24 ore dalle 00 alle 23. 23
K Informazioni sul fuso orario. +07:00
m Il minuto, da 0 a 59. 9
mm Il minuto, da 00 a 59. 09
M Il mese, da 1 a 12. 5
MM Il mese, da 01 a 12. 05
MMM Il nome abbreviato del mese. Maggio
MMMM Il nome completo del mese. Maggio
s Il secondo, da 0 a 59. 8
ss Il secondo, da 00 a 59. 08
t Il primo carattere del designatore AM/PM. P
tt Il designatore AM/PM. PM
y L'anno, da 0 a 99. 80
yy L'anno, da 00 a 99. 80
yyy L'anno, con un minimo di tre cifre. 2080
yyyy L'anno come numero a quattro cifre. 2080
yyyy L'anno come numero a cinque cifre. 02080
z Ore sfalsate rispetto all'ora UTC, senza zeri iniziali. +7
zz Ore sfalsate rispetto all'ora UTC, con uno zero iniziale per un valore a una cifra. +07
zzz Ore e minuti sfalsati rispetto all'ora UTC. +07:00
: Il separatore di tempo. :
/ Il separatore di data. /
"string" Delimitatore di stringa letterale. stringa
% Definisce il seguente carattere come identificatore di formato personalizzato.
\ Il carattere di escape.

Qualsiasi altro carattere viene copiato nella stringa del risultato invariato.

Importante: Quando si utilizza una stringa di formato personalizzata di un carattere, è necessario anteporre il segno di percentuale (% ). In alternativa, puoi aggiungere uno spazio. Se non lo fai, otterrai NULL o l'identificatore di formato potrebbe essere interpretato come un identificatore di formato standard e otterrai risultati non desiderati.

Cosa sono le stringhe di formato personalizzate?

Una stringa di formato personalizzata è costituita da uno o più identificatori di formato personalizzati. La tabella precedente elenca gli identificatori di formato personalizzati disponibili per la formattazione dei valori di data e ora in una stringa.

Esistono anche stringhe di formato di data e ora standard. Ognuno di questi è un alias per una stringa di formato personalizzata. Le stringhe di formato standard sono costituite da un unico identificatore di formato, quindi sono più veloci da usare (ma meno flessibili delle stringhe di formato personalizzate).

Qualsiasi stringa di formato che non sia una stringa di formato di data e ora standard viene interpretata come una stringa di formato di data e ora personalizzata.

Esempio di utilizzo

Il modo in cui funzionano gli identificatori di formato personalizzati è che puoi combinarli insieme per formare una stringa di formato personalizzata quando usi FORMAT() funzione. Questo determina come viene formattato il risultato.

Ecco alcuni esempi:

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';

Risultato:

+-------------+-----------------+------------------------+------------+------------+
| 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   |
+-------------+-----------------+------------------------+------------+------------+

Quindi consente molta flessibilità nel modo in cui presenti le date e gli orari.

Ecco un esempio di utilizzo di una stringa di formato costituita da un unico identificatore di formato.

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';

Risultato:

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

Come accennato, dovresti anteporre questi con un segno di percentuale per evitare di ottenere NULL e in modo che l'identificatore di formato non venga inavvertitamente interpretato come una stringa di formato standard.

Ecco cosa succede se rimuovo il segno di percentuale dall'esempio precedente:

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';

Risultato:

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

Otteniamo un risultato completamente diverso.