I SQL Server er FORMAT()
funktionen giver dig mulighed for at formatere dato/klokkeslæt og talværdier som en formateret streng ved at indsætte en "formatstreng" som det andet argument (det første argument er den værdi, der bliver formateret).
Her er et eksempel på denne funktion i aktion:
FORMAT(@date, 'dd/MM/yyyy');
I dette tilfælde er formatstrengen dd/MM/åååå .
Denne særlige formatstreng angiver, at @date
værdien skal formateres med en tocifret dag, tocifret måned og et firecifret år i den rækkefølge og med skråstreger som skilletegn.
Dette ville resultere i noget som dette:
21/05/2019
En formatstreng er en streng, der indeholder en eller flere foruddefinerede formatspecifikationer , som er enkelte tegn eller grupper af tegn, der definerer, hvordan outputtet skal formateres.
SQL Server accepterer kun formatstrenge, der understøttes af .NET Framework.
En formatstreng kan være en standardformatstreng eller en brugerdefineret formatstreng. Sådan fungerer de:
- En standardformatstreng er en foruddefineret formatstreng. Den indeholder en enkelt formatspecifikation, der tolkes som at repræsentere et bestemt, foruddefineret format. Standardformatstrenge er faktisk aliaser for brugerdefinerede formatstrenge. Den faktiske brugerdefinerede formatstreng, der bruges, vil dog ofte afhænge af kulturen.
- En tilpasset formatstreng på den anden side består af en eller flere brugerdefinerede formatspecifikationer, der i kombination med hinanden vil definere formatet. Dette giver dig meget mere fleksibilitet med at definere, hvordan outputtet skal se ud.
Eksempel 1 – Standardformatstreng
Her er et eksempel for at demonstrere, hvordan standardformatstrenge fungerer.
SELECT FORMAT(1234, 'C') AS Result;
Resultat:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
I dette eksempel er C
er formatstrengen. I dette tilfælde er det en standard numerisk formatstreng bestående af en enkelt formatspecifikation. Denne særlige formatangivelse bruges til at repræsentere et valutabeløb.
Vi kunne også få det samme resultat ved at bruge en tilpasset numerisk formatstreng.
Eksempel 2 – Brugerdefineret formatstreng
Dette eksempel producerer det samme output som det foregående eksempel. Forskellen er, at jeg i dette eksempel bruger en brugerdefineret formatstreng i stedet for en standardstreng.
SELECT FORMAT(1234, '$#,###.00') AS Result;
Resultat:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
En tilpasset formatstreng giver dig mulighed for at oprette dit eget brugerdefinerede format. Du kan kombinere strenge med formatspecifikationer for at bygge dit eget brugerdefinerede format.
I dette eksempel bruger jeg #
formatspecificator, som er en pladsholder for et ciffer. Hvis et ciffer ikke er til stede, vises der intet ciffer i den resulterende streng.
Jeg bruger også 0
formatspecifikation, som også er en pladsholder for ethvert ciffer. Men i dette tilfælde, hvis et ciffer ikke er til stede, bruges et nul i stedet.
Jeg inkluderer også $
, ,
og .
bogstavelige strenge i formatstrengen. Disse er inkluderet i outputtet, præcis som de er.
Hvis vi reducerer inputtallet, kan vi se, hvordan resultatet er forskelligt mellem 0
og #
formatspecifikationer, og hvordan de sammenlignes med C
standardformatspecifikation fra det foregående eksempel:
SELECT FORMAT(34, 'C') AS 'C', FORMAT(34, '$0,000.00') AS '0', FORMAT(34, '$#,###.00') AS '#';
Resultat:
+--------+-----------+--------+ | C | 0 | # | |--------+-----------+--------| | $34.00 | $0,034.00 | $34.00 | +--------+-----------+--------+
Som du måske forestiller dig, giver brugerdefinerede formatstrenge meget mere fleksibilitet i forhold til standardformatstrenge.
Der er dog mange scenarier, hvor standardformatstrenge kan være mere kraftfulde, især når det kommer til at producere dynamiske resultater, der tager højde for kulturen. Mere om kultur snart.
Eksempel 3 – Formatering af dato og klokkeslæt
Dato/tidsværdier giver også mulighed for at vælge standard eller brugerdefinerede formatstrenge. Her er et eksempel på en dato-/tidsværdi, der formateres med en standardformatstreng, samt nogle tilpassede formatstrenge.
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';
Resultat:
+----------+------------+------------+-------------------+------------------------+ | 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 | +----------+------------+------------+-------------------+------------------------+
Den første bruger en standardformatstreng, og de fire andre bruger brugerdefinerede formatstrenge.
For en komplet liste over tilgængelige dato- og tidsformatstrenge, se følgende:
- Liste over standarddato-/tidsformatstrengene
- Liste over de tilpassede dato-/tidsformatstrenge
Eksempel 4 – Kultur
Resultaterne af formatstrenge kan nogle gange afhænge af den anvendte kultur. For eksempel er et kort datoformat i USA repræsenteret som 'M/d/yyyy', men i Storbritannien er det repræsenteret som 'dd/MM/yyyy'.
Som standard bruges sproget for den aktuelle session til at definere kulturen. Men FORMAT()
funktionen giver dig mulighed for at tilsidesætte dette.
Funktionens syntaks lyder således:
FORMAT ( value, format [, culture ] )
Så det giver dig mulighed for at angive en kultur som et valgfrit argument.
Her er et eksempel på, hvor forskellige kulturer kan resultere i, at en enkelt formatstreng producerer en række forskellige formater.
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';
Resultat:
+--------------+------------+------------+------------+ | US English | British | German | Japanese | |--------------+------------+------------+------------| | 5/1/2080 | 01/05/2080 | 01.05.2080 | 05/01/2080 | +--------------+------------+------------+------------+
I dette tilfælde bruger alle fire lande d
standard dato- og tidsformatstreng. De bruger dog alle et andet kulturargument. Dette giver et forskelligt resultat, der passer til hver kultur.
Og det er ikke kun standard formater strenge, der er påvirket af kultur. Kultur kan også påvirke resultatet af brugerdefineret formatere strenge. Her er et eksempel:
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';
Resultat:
+-------------------+------------------+----------------------+----------------+ | US English | German | Vietnamese | Swedish | |-------------------+------------------+----------------------+----------------| | Wednesday, 01 May | Mittwoch, 01 Mai | Thứ Tư, 01 Tháng Năm | onsdag, 01 maj | +-------------------+------------------+----------------------+----------------+
Du har også mulighed for at bruge den invariante kultur (iv
). Den invariante kultur er kulturufølsom. Det er forbundet med det engelske sprog, men ikke med noget land/område. For mere information og eksempler, se Sådan angives den invariante kultur, når du bruger FORMAT() i SQL Server.