sql >> Database >  >> RDS >> Sqlserver

Hoe de FORMAT()-functie werkt in SQL Server (T-SQL)

In SQL Server kunt u de T-SQL FORMAT() . gebruiken functie om waarden zoals getallen en datums als opgemaakte tekenreeksen te retourneren.

U geeft de waarde op die moet worden opgemaakt en u geeft de opmaak op die moet worden gebruikt. De functie accepteert een optioneel argument waarmee u een cultuur kunt specificeren die moet worden gebruikt bij het formatteren van de waarde.

Syntaxis

De syntaxis gaat als volgt:

FORMAT ( value, format [, culture ] )

Waar value is de waarde die u wilt opmaken, en format is een geldige formaattekenreeks die het gewenste formaat specificeert.

De optionele culture argument kan worden gebruikt om een ​​cultuur te specificeren. Indien weggelaten, wordt de taal van de huidige sessie gebruikt.

De FORMAT functie is niet-deterministisch.

Voorbeeld 1 – Een getal opmaken

Hier is een voorbeeld van het opmaken van een getal:

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

Resultaat:

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

In dit geval gebruikte ik N als de format string. Dit is een standaard numerieke notatiespecificatie voor het uitvoeren van de waarde als een getal. Deze specifieke indelingsspecificatie resulteert erin dat de uitvoer wordt opgemaakt met integrale en decimale cijfers, groepsscheidingstekens en een decimaalteken met optioneel minteken. Deze opmaakspecificatie is niet hoofdlettergevoelig, dus ofwel N of n gaat goed.

Voorbeeld 2 – Formaat naar een valuta

Hier is een voorbeeld van het opmaken van een getal als valuta:

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

Resultaat:

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

Meer numerieke formaten

Er zijn veel meer format strings die gebruikt kunnen worden met de FORMAT() functie. Er zijn bijvoorbeeld opmaakreeksen voor percentages, vaste komma, exponentieel (wetenschappelijk), hexadecimaal en meer.

De numerieke notatiereeksen zijn gescheiden in standaard en aangepast.

De volgende twee artikelen bevatten alle tekenreeksen voor numerieke notatie, inclusief voorbeelden:

  • Standaard numerieke notatietekenreeksen
  • Aangepaste numerieke notatietekenreeksen

Zie ook Getallen opmaken in SQL Server voor meer voorbeelden van het opmaken van getallen.

Voorbeeld 3 – Een datum opmaken

Hier is een voorbeeld van het opmaken van een datum:

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

Resultaat:

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

In dit geval gebruikte ik D die een lange datumpatroon specificeert.

Meer datumnotaties

Er zijn veel meer opmaakreeksen die kunnen worden gebruikt voor het opmaken van datums. Net als bij de numerieke notatiereeksen, worden de datum- en tijdnotatiereeksen gescheiden in standaard en aangepast, zodat u uw eigen aangepaste notaties kunt bouwen, of u kunt vertrouwen op een standaardnotatie.

De volgende twee artikelen bevatten alle tekenreeksen voor datum- en tijdnotatie, inclusief voorbeelden:

  • Standaard tekenreeksen voor datum- en tijdnotatie
  • Aangepaste tekenreeksen voor datum- en tijdnotatie

Zie ook Hoe de datum en tijd in SQL Server te formatteren voor meer voorbeelden.

Voorbeeld 4 – De optionele culture Argument

Hier is een voorbeeld van het gebruik van de culture argument om een ​​waarde in verschillende valuta terug te geven:

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

Resultaat:

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

De FORMAT() functie accepteert elke cultuur die wordt ondersteund door het .NET Framework als argument; het is niet beperkt tot de talen die expliciet worden ondersteund door SQL Server.

Als u dit argument niet opgeeft, wordt de taal van de huidige sessie gebruikt.

Zie Hoe taalinstellingen uw FORMAT() kunnen beïnvloeden voor meer voorbeelden Resultaten.

Voorbeeld 5 – Ongeldige culture Argument

Als u een ongeldige cultuur opgeeft, krijgt u een foutmelding:

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

Resultaat:

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

Voorbeeld 6 – Ongeldige formaatwaarde

Voor andere fouten retourneert de functie echter NULL . Dit is bijvoorbeeld wat er gebeurt als ik een ongeldige waarde opgeef die moet worden opgemaakt:

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

Resultaat:

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

In dit geval probeerde ik een datum op te maken in een valuta, en daarom was het resultaat NULL .

Geldige gegevenstypen

FORMAT() vertrouwt op de aanwezigheid van .NET Framework Common Language Runtime (CLR) en gebruikt de CLR-opmaakregels.

De volgende gegevenstypen kunnen worden opgemaakt met de FORMAT() functie. Deze lijst bevat de acceptabele gegevenstypen voor de invoerreeks samen met hun equivalente typen voor .NET Framework-toewijzing.

Categorie Type .NET-type
Numeriek groot Int64
Numeriek int Int32
Numeriek smallint Int16
Numeriek tinyint Byte
Numeriek decimaal SqlDecimaal
Numeriek numeriek SqlDecimaal
Numeriek zweven Dubbel
Numeriek echt Enkel
Numeriek kleingeld Decimaal
Numeriek geld Decimaal
Datum en tijd datum DateTime
Datum en tijd tijd Tijdspanne
Datum en tijd datumtijd DateTime
Datum en tijd smalldatetime DateTime
Datum en tijd datetime2 DateTime
Datum en tijd datetimeoffset DateTimeOffset

Ontsnappen van dubbele punten en perioden voor het gegevenstype 'tijd'

Bij gebruik van FORMAT , dubbele punten en punten moeten worden geëscaped (dit is in overeenstemming met de CLR-opmaakregels). Daarom, wanneer de notatietekenreeks (tweede parameter) een dubbele punt of punt bevat, moet de dubbele punt of punt worden geëscaped met een backslash wanneer een invoerwaarde (eerste parameter) van de tijd is gegevenstype.

Voorbeeld:

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

Resultaat:

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

Dus zoals verwacht, retourneert de unescaped string NULL .

Zoals vermeld, is dit alleen van toepassing op de tijd data type. Als we de invoerwaarde wijzigen in een ander gegevenstype, hoeven we er niet aan te ontsnappen:

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

Resultaat:

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

In dit geval is de invoerwaarde datetime , en daarom is het resultaat prima zonder eraan te ontsnappen.

U kunt de backslash ook gebruiken om te ontsnappen aan elk ander teken dat u in de resultaatreeks wilt opnemen, dat anders zou worden geïnterpreteerd als een opmaakspecificatie. Een teken voorafgaan met een backslash betekent dat het volgende teken een letterlijk teken is dat ongewijzigd in de resultaatreeks moet worden opgenomen.

In een aangepaste tekenreeks voor datum- en tijdnotatie, de d , f , F , g , h , H , K , m , M , s , t , y , z , : , of / tekens worden geïnterpreteerd als specificaties voor aangepaste indelingen in plaats van als letterlijke tekens.

In een aangepaste numerieke notatiereeks, de # , 0 , . , , , % , en symbolen worden geïnterpreteerd als formaatspecificaties in plaats van als letterlijke tekens. De hoofdletters en kleine letters E evenals de + en - symbolen kunnen ook worden geïnterpreteerd als formaatspecificaties, afhankelijk van hun positie binnen de formaatreeks.

Als u een backslash in de resultaatreeks moet opnemen, kunt u deze escapen met een andere backslash.

Op afstand

De FORMAT() functie kan niet op afstand worden bediend, aangezien deze afhankelijk is van de aanwezigheid van de CLR. Het op afstand plaatsen van een functie die de CLR vereist, kan een fout veroorzaken op de externe server.

Wanneer gebruik je de FORMAT() Functie

Microsoft raadt aan dat de FORMAT() functie wordt gebruikt voor het opmaken van datum/tijd en getalwaarden als tekenreeksen, en voor algemene gegevenstypeconversies, ofwel de CAST() functie of de CONVERT() functie moet in plaats daarvan worden gebruikt.


  1. SQL tussen niet inclusief

  2. PHP mysql datumnotatie invoegen

  3. Mysql-volgorde op specifieke ID-waarden

  4. Hoe e-mailadres valideren met PL/SQL?