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

Brugerdefinerede dato-/tidsformatstrenge, der understøttes af FORMAT() i SQL Server

Denne artikel giver en reference til de brugerdefinerede dato- og klokkeslætformatspecifikationer, der kan bruges ved formatering af datoer og/eller klokkeslæt ved hjælp af FORMAT() funktion i SQL Server, sammen med eksempler.

Du kan kombinere enhver af disse formatspecifikationer for at producere en tilpasset formatstreng. Se nedenfor for et kodeeksempel og en forklaring på, hvordan tilpassede formatstrenge fungerer.

Eksemplerne i tabellen antager en dato-tidsforskydning værdi af 2080-05-01 23:09:08.1234567 +07:00 .

Format streng Beskrivelse Eksempel
d Dagen i måneden fra 1 til 31. 1
dd Dagen i måneden, fra 01 til 31. 01
ddd Ugedagens forkortede navn. Ons
dddd Ugedagens fulde navn. onsdag
f Tiendedelene af et sekund i en dato- og tidsværdi. 1
ff Hundrededele af et sekund i en dato- og tidsværdi. 12
fff Millisekunderne i en dato- og tidsværdi. 123
ffff Titusindedele af et sekund i en dato- og tidsværdi. 1234
fffff De hundrede tusindedele af et sekund i en dato- og tidsværdi. 12345
fffffff Milliontedele af et sekund i en dato- og tidsværdi. 123456
fffffff De ti milliontedele af et sekund i en dato- og tidsværdi. 1234567
F Hvis ikke-nul, tiendedele af et sekund i en dato- og tidsværdi. 1
FF Hvis ikke-nul, hundrededele af et sekund i en dato- og tidsværdi. 12
FFF Hvis ikke-nul, millisekunderne i en dato- og tidsværdi. 123
FFFF Hvis ikke-nul, ti tusindedele af et sekund i en dato- og tidsværdi. 1234
FFFFF Hvis ikke-nul, hundrede tusindedele af et sekund i en dato- og tidsværdi. 12345
FFFFFF Hvis ikke-nul, milliontedele af et sekund i en dato- og tidsværdi. 123456
FFFFFFF Hvis ikke-nul, de ti milliontedele af et sekund i en dato- og tidsværdi. 1234567
g Perioden eller æraen. A.D.
gg Perioden eller æraen. A.D.
h Timen med et 12-timers ur fra 1 til 12. 11
hh Timen med et 12-timers ur fra 01 til 12. 11
H Timen med et 24-timers ur fra 0 til 23. 23
HH Timen med et 24-timers ur fra 00 til 23. 23
K Tidszoneoplysninger. +07:00
m Minuttet, fra 0 til 59. 9
mm Minuttet, fra 00 til 59. 09
M Måneden fra 1 til 12. 5
MM Måneden fra 01 til 12. 05
MMM Månedens forkortede navn. Maj
MMMM Månedens fulde navn. Maj
s Den anden, fra 0 til 59. 8
ss Den anden, fra 00 til 59. 08
t Det første tegn i AM/PM-betegnelsen. P
tt AM/PM-betegnelsen. PM
y Året, fra 0 til 99. 80
yy Året, fra 00 til 99. 80
yyy Året, med minimum tre cifre. 2080
yyyy Året som et firecifret tal. 2080
yyyy Året som et femcifret tal. 02080
z Timer forskudt fra UTC, uden foranstillede nuller. +7
zz Timer forskudt fra UTC, med et indledende nul for en enkeltcifret værdi. +07
zzz Timer og minutter forskudt fra UTC. +07:00
: Tidsseparatoren. :
/ Datoseparatoren. /
"string" Literal streng-adskiller. streng
% Definerer følgende tegn som en brugerdefineret formatspecifikation.
\ Escape-karakteren.

Ethvert andet tegn kopieres til resultatstrengen uændret.

Vigtigt: Når du bruger en streng med et brugerdefineret format med et enkelt tegn, skal du sætte procenttegnet foran den (% ). Alternativt kan du tilføje et mellemrum. Hvis du ikke gør dette, får du enten NULL, eller også kan formatspecifikationen fortolkes som en standardformatspecifikation, og du vil få utilsigtede resultater.

Hvad er strenge til tilpasset format?

En brugerdefineret formatstreng består af en eller flere brugerdefinerede formatspecifikationer. Ovenstående tabel viser de brugerdefinerede formatspecifikationer, der er tilgængelige for formatering af dato- og tidsværdier til en streng.

Der er også standard dato- og tidsformatstrenge. Hver af disse er et alias for en tilpasset formatstreng. Standardformatstrenge består af en enkelt formatspecifikation, så de er hurtigere at bruge (men mindre fleksible end tilpassede formatstrenge).

Enhver formatstreng, der ikke er en standard dato- og tidsformatstreng, fortolkes som en tilpasset dato- og tidsformatstreng.

Eksempel på brug

Måden brugerdefinerede formatspecifikationer fungerer på er, at du kan kombinere dem sammen for at danne en brugerdefineret formatstreng, når du bruger FORMAT() fungere. Dette bestemmer, hvordan resultatet formateres.

Her er nogle eksempler:

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

Resultat:

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

Så det giver mulighed for en masse fleksibilitet i, hvordan du præsenterer dine datoer og tidspunkter.

Her er et eksempel på brug af en formatstreng, der består af en enkelt formatspecifikation.

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

Resultat:

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

Som nævnt bør du forankre disse med et procenttegn for at undgå at få NULL og for at formatspecifikationen ikke utilsigtet bliver fortolket som en standardformatstreng.

Her er hvad der sker, hvis jeg fjerner procenttegnet fra det forrige eksempel:

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

Resultat:

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

Vi får et helt andet resultat.


  1. Forstå hvad sp_updatestats virkelig opdaterer

  2. Oracle:Hvad gør `(+)` i en WHERE-sætning?

  3. Hvordan indsætter man et tidsstempel i Oracle?

  4. SQL erstatter alle NULL'er