sql >> Databasteknik >  >> RDS >> Sqlserver

Hur FORMAT()-funktionen fungerar i SQL Server (T-SQL)

I SQL Server kan du använda T-SQL FORMAT() funktion för att returnera värden som siffror och datum som formaterade strängar.

Du anger värdet som ska formateras och du anger formatet som ska användas. Funktionen accepterar ett valfritt argument som låter dig ange en kultur som ska användas när du formaterar värdet.

Syntax

Syntaxen ser ut så här:

FORMAT ( value, format [, culture ] )

Där value är värdet du vill ha formaterat och format är en giltig formatsträng som anger det önskade formatet.

Den valfria culture argument kan användas för att specificera en kultur. Om det utelämnas används språket för den aktuella sessionen.

FORMAT funktion är icke-deterministisk.

Exempel 1 – Formatera ett tal

Här är ett exempel på hur du formaterar ett tal:

SELECT FORMAT(1, 'N') AS Result;

Resultat:

+----------+
| Result   |
|----------|
| 1.00     |
+----------+

I det här fallet använde jag N som formatsträng. Detta är en standard numerisk formatspecifikation för att mata ut värdet som ett tal. Denna speciella formatspecifikation resulterar i att utdata formateras med heltals- och decimalsiffror, gruppavgränsare och en decimalavgränsare med valfritt negativt tecken. Denna formatspecifikator är skiftlägesokänslig, så antingen N eller n är bra.

Exempel 2 – Formatera till en valuta

Här är ett exempel på hur du formaterar ett tal som en valuta:

SELECT FORMAT(1, 'C') AS Result;

Resultat:

+----------+
| Result   |
|----------|
| $1.00    |
+----------+

Fler numeriska format

Det finns många fler formatsträngar som kan användas med FORMAT() fungera. Det finns till exempel formatsträngar för procentsatser, fixpunkt, exponentiell (vetenskaplig), hexadecimal och mer.

De numeriska formatsträngarna är uppdelade i standard och anpassad.

Följande två artiklar listar alla numeriska formatsträngar, inklusive exempel:

  • Stängar i standardnumeriskt format
  • Strängar med anpassat numeriskt format

Se även Hur man formaterar tal i SQL Server för fler exempel på formatering av tal.

Exempel 3 – Formatera ett datum

Här är ett exempel på hur du formaterar ett datum:

SELECT 
  GETDATE() AS 'Unformatted Date',
  FORMAT( GETDATE(), 'D') AS 'Formatted Date';

Resultat:

+-------------------------+------------------------+
| Unformatted Date        | Formatted Date         |
|-------------------------+------------------------|
| 2019-05-08 06:16:55.613 | Wednesday, May 8, 2019 |
+-------------------------+------------------------+

I det här fallet använde jag D som anger ett långt datummönster.

Fler datumformat

Det finns många fler formatsträngar som kan användas för att formatera datum. Precis som med de numeriska formatsträngarna är datum- och tidsformatsträngar separerade i standard och anpassade, så att du kan bygga dina egna anpassade format, eller så kan du lita på ett standardformat.

Följande två artiklar listar alla datum- och tidsformatsträngar, inklusive exempel:

  • Stängar för standardformat för datum och tid
  • Anpassade datum- och tidsformatsträngar

Se även Hur man formaterar datum och tid i SQL Server för fler exempel.

Exempel 4 – Den valfria culture Argument

Här är ett exempel på hur du använder culture argument för att returnera ett värde i olika valutor:

SELECT 
    FORMAT(1, 'C', 'fr-FR') AS 'France', 
    FORMAT(1, 'C', 'th-TH') AS 'Thailand', 
    FORMAT(1, 'C', 'ja-JP') AS 'Japan';

Resultat:

+----------+------------+---------+
| France   | Thailand   | Japan   |
|----------+------------+---------|
| 1,00 €   | ฿1.00      | ¥1      |
+----------+------------+---------+

FORMAT() funktion accepterar alla kulturer som stöds av .NET Framework som argument; det är inte begränsat till de språk som uttryckligen stöds av SQL Server.

Om du inte anger detta argument används språket för den aktuella sessionen.

För fler exempel, se Hur språkinställningar kan påverka din FORMAT() Resultat.

Exempel 5 – Ogiltig culture Argument

Om du anger en ogiltig kultur får du ett felmeddelande:

SELECT FORMAT(1, 'C', 'oop-SS!') AS 'Oops!';

Resultat:

The culture parameter 'oop-SS!' provided in the function call is not supported.

Exempel 6 – Ogiltigt formatvärde

Men för andra fel returnerar funktionen NULL . Här är till exempel vad som händer om jag anger ett ogiltigt värde som ska formateras:

SELECT FORMAT(GETDATE(), 'C') AS 'Result';

Resultat:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

I det här fallet försökte jag formatera ett datum till en valuta, och därför blev resultatet NULL .

Giltiga datatyper

FORMAT() förlitar sig på närvaron av .NET Framework Common Language Runtime (CLR) och använder CLR-formateringsreglerna.

Följande datatyper kan formateras med FORMAT() fungera. Den här listan innehåller de acceptabla datatyperna för indatasträngen tillsammans med deras .NET Framework-mappningstyper.

Kategori Typ .NET-typ
Numerisk stor Int64
Numerisk int Int32
Numerisk smallint Int16
Numerisk tinyint Byte
Numerisk decimal SqlDecimal
Numerisk numerisk SqlDecimal
Numerisk flyta Dubbel
Numerisk riktigt Singel
Numerisk småpengar Decimal
Numerisk pengar Decimal
Datum och tid datum DatumTid
Datum och tid tid Tidsspann
Datum och tid datumtid DatumTid
Datum och tid smalldatetime DatumTid
Datum och tid datetime2 DatumTid
Datum och tid datetimeoffset DateTimeOffset

Escaping kolon och perioder för datatypen 'tid'

När du använder FORMAT , kolon och punkter måste escapes (detta följer CLR-formateringsreglerna). Därför, när formatsträngen (andra parametern) innehåller ett kolon eller punkt, måste kolonet eller perioden escapes med ett snedstreck när ett indatavärde (första parametern) är av tiden datatyp.

Exempel:

SELECT 
  CAST('12:15' AS time) AS 'Unformatted Data',
  FORMAT(CAST('12:15' AS time), N'hh.mm') AS 'Unescaped',
  FORMAT(CAST('12:15' AS time), N'hh\.mm') AS 'Escaped';

Resultat:

+--------------------+-------------+-----------+
| Unformatted Data   | Unescaped   | Escaped   |
|--------------------+-------------+-----------|
| 12:15:00           | NULL        | 12.15     |
+--------------------+-------------+-----------+

Så som förväntat returnerar den oescapeda strängen NULL .

Detta gäller som sagt endast tiden data typ. Om vi ​​ändrar inmatningsvärdet till en annan datatyp behöver vi inte undkomma det:

SELECT 
  CAST('12:15' AS datetime) AS 'Unformatted Data',
  FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Unescaped',
  FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Escaped';

Resultat:

+-------------------------+-------------+-----------+
| Unformatted Data        | Unescaped   | Escaped   |
|-------------------------+-------------+-----------|
| 1900-01-01 12:15:00.000 | 12.15       | 12.15     |
+-------------------------+-------------+-----------+

I det här fallet är inmatningsvärdet datetime , och därför blir resultatet bra utan att undvika det.

Du kan också använda omvänt snedstreck för att undvika alla andra tecken som du vill ha med i resultatsträngen, som annars skulle tolkas som en formatspecifikation. Att föregå ett tecken med ett snedstreck betyder att följande tecken är ett bokstavligt tecken som bör inkluderas i resultatsträngen oförändrad.

I en anpassad datum- och tidsformatsträng, d , f , F , g , h , H , K , m , M , s , t , y , z , : , eller / tecken tolkas som specifikationer för anpassade format snarare än som bokstavliga tecken.

I en sträng med anpassat numeriskt format, # , 0 , . , , , % och symboler tolkas som formatspecifikationer snarare än som bokstavliga tecken. Versaler och gemener E samt + och - symboler kan också tolkas som formatspecifikatorer, beroende på deras placering i formatsträngen.

Om du behöver inkludera ett omvänt snedstreck i resultatsträngen, undvik det med ett nytt snedstreck.

Fjärrkontroll

FORMAT() Funktionen kan inte fjärrstyras eftersom den beror på närvaron av CLR. Att fjärrstyra en funktion som kräver CLR kan orsaka ett fel på fjärrservern.

När ska FORMAT() användas Funktion

Microsoft rekommenderar att FORMAT() funktionen används för språkmedveten formatering av datum/tid och talvärden som strängar, och för allmänna datatypkonverteringar, antingen CAST() funktionen eller CONVERT() funktionen ska användas istället.


  1. Hur man skapar ett rullningsbart, uppdateringsbart ResultSet-objekt i JDBC

  2. Drivrutinen JDBC PostgreSQL med Android

  3. SQL LocalDB vs SQL Server CE

  4. Vad maskininlärning betyder för databasproffs