I SQL Server, FORMAT()
funktionen gör att du kan formatera datum/tid och siffervärden som en formaterad sträng genom att skicka in en "formatsträng" som det andra argumentet (det första argumentet är värdet som formateras).
Här är ett exempel på den här funktionen:
FORMAT(@date, 'dd/MM/yyyy');
I det här fallet är formatsträngen dd/MM/åååå .
Denna speciella formatsträng anger att @date
värdet ska formateras med en tvåsiffrig dag, tvåsiffrig månad och ett fyrsiffrigt år, i den ordningen, och med snedstreck som avgränsare.
Detta skulle resultera i något i stil med detta:
21/05/2019
En formatsträng är en sträng som innehåller en eller flera fördefinierade formatspecifikationer , som är enstaka tecken eller grupper av tecken som definierar hur utdata ska formateras.
SQL Server accepterar endast formatsträngar som stöds av .NET Framework.
En formatsträng kan vara en standardformatsträng eller en anpassad formatsträng. Så här fungerar de:
- En standardformatsträng är en fördefinierad formatsträng. Den innehåller en enda formatspecifikator som tolkas som att representera ett visst, fördefinierat format. Standardformatsträngar är faktiskt alias för anpassade formatsträngar. Men den faktiska anpassade formatsträngen som används beror ofta på kulturen.
- En sträng med anpassat format å andra sidan, består av en eller flera anpassade formatspecifikationer som i kombination med varandra kommer att definiera formatet. Detta ger dig mycket mer flexibilitet när du definierar hur resultatet ska se ut.
Exempel 1 – Standardformatsträng
Här är ett exempel för att visa hur standardformatsträngar fungerar.
SELECT FORMAT(1234, 'C') AS Result;
Resultat:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
I det här exemplet, C
är formatsträngen. I det här fallet är det en standard numerisk formatsträng som består av en enda formatspecifikator. Denna speciella formatspecifikation används för att representera ett valutabelopp.
Vi kan också få samma resultat genom att använda en anpassad sträng med numeriskt format.
Exempel 2 – Anpassat formatsträng
Detta exempel ger samma utdata som föregående exempel. Skillnaden är att i det här exemplet använder jag en anpassad formatsträng istället för en standardsträng.
SELECT FORMAT(1234, '$#,###.00') AS Result;
Resultat:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
En sträng med anpassat format låter dig skapa ditt eget anpassade format. Du kan kombinera strängar med formatspecifikationer för att bygga ditt eget anpassade format.
I det här exemplet använder jag #
formatspecifikation, som är en platshållare för en siffra. Om en siffra inte finns, visas ingen siffra i den resulterande strängen.
Jag använder också 0
formatspecifikation, som också är en platshållare för valfri siffra. Men i det här fallet, om en siffra inte finns, används en nolla istället.
Jag inkluderar även $
, ,
och .
bokstavliga strängar i formatsträngen. Dessa ingår i utdata exakt som de är.
Om vi minskar inmatningsnumret kan vi se hur resultatet skiljer sig mellan 0
och #
formatspecifikationer och hur de jämförs med C
standardformatspecifikation från föregående exempel:
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 kanske föreställer dig ger anpassade formatsträngar mycket mer flexibilitet jämfört med standardformatsträngar.
Det finns dock många scenarier där standardformatsträngar kan vara mer kraftfulla, särskilt när det gäller att producera dynamiska resultat som tar hänsyn till kulturen. Mer om kultur snart.
Exempel 3 – Formatering av datum och tid
Datum/tid-värden erbjuder också valet av standard- eller anpassade formatsträngar. Här är ett exempel på ett datum-/tidsvärde som formateras med en standardformatsträng, samt några anpassade formatsträngar.
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örsta använder en standardformatsträng och de andra fyra använder anpassade formatsträngar.
För en fullständig lista över tillgängliga datum- och tidsformatsträngar, se följande:
- Lista över standardsträngar för datum/tidsformat
- Lista över anpassade datum-/tidsformatsträngar
Exempel 4 – Kultur
Resultaten av formatsträngar kan ibland bero på vilken kultur som används. Till exempel, i USA representeras ett kort datumformat som "M/d/åååå", men i Storbritannien representeras det som "dd/MM/åååå".
Som standard används språket för den aktuella sessionen för att definiera kulturen. Men FORMAT()
funktionen låter dig åsidosätta detta.
Funktionens syntax ser ut så här:
FORMAT ( value, format [, culture ] )
Så det låter dig specificera en kultur som ett valfritt argument.
Här är ett exempel på var olika kulturer kan resultera i en enda formatsträng som producerar ett antal olika format.
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 det här fallet använder alla fyra länderna d
standard formatsträng för datum och tid. Men de använder alla olika kulturargument. Detta ger olika resultat för att passa varje kultur.
Och det är inte bara standard formatsträngar som är influerade av kultur. Kultur kan också påverka resultatet av anpassad formatera strängar. Här är ett exempel:
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 också möjlighet att använda den invarianta kulturen (iv
). Den invarianta kulturen är kulturokänslig. Det är associerat med det engelska språket men inte med något land/region. För mer information och exempel, se Hur du specificerar den invarianta kulturen när du använder FORMAT() i SQL Server.