In SQL Server, de FORMAT()
Met de functie kunt u datum-/tijd- en getalwaarden opmaken als een opgemaakte tekenreeks door een "opmaakreeks" door te geven als het tweede argument (het eerste argument is de waarde die wordt opgemaakt).
Hier is een voorbeeld van deze functie in actie:
FORMAT(@date, 'dd/MM/yyyy');
In dit geval is de notatiereeks dd/MM/jjjj .
Deze specifieke notatiereeks specificeert dat de @date
waarde moet worden opgemaakt met een dag van twee cijfers, een maand van twee cijfers en een jaar van vier cijfers, in die volgorde, en met schuine strepen als scheidingstekens.
Dit zou resulteren in iets als dit:
21/05/2019
Een opmaakreeks is een tekenreeks die een of meer vooraf gedefinieerde formaatspecificaties bevat , dit zijn enkele tekens of groepen tekens die bepalen hoe de uitvoer moet worden opgemaakt.
SQL Server accepteert alleen tekenreeksen die worden ondersteund door .NET Framework.
Een opmaaktekenreeks kan een standaardopmaaktekenreeks of een aangepaste opmaaktekenreeks zijn. Zo werken ze:
- Een string in standaardformaat is een vooraf gedefinieerde opmaakreeks. Het bevat een enkele formaatspecificatie die wordt geïnterpreteerd als een bepaald, vooraf gedefinieerd formaat. Strings met standaardindeling zijn eigenlijk aliassen voor strings met aangepaste indelingen. De daadwerkelijke tekenreeks voor aangepaste indeling die wordt gebruikt, is echter vaak afhankelijk van de cultuur.
- Een aangepaste opmaakreeks aan de andere kant, bestaat uit een of meer aangepaste formaatspecificaties die, in combinatie met elkaar, het formaat zullen definiëren. Dit geeft je veel meer flexibiliteit bij het definiëren hoe de uitvoer eruit moet zien.
Voorbeeld 1 – Standaardformaattekenreeks
Hier is een voorbeeld om te demonstreren hoe strings in standaardopmaak werken.
SELECT FORMAT(1234, 'C') AS Result;
Resultaat:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
In dit voorbeeld, C
is de opmaakreeks. In dit geval is het een standaard numerieke notatiereeks die bestaat uit een enkele notatiespecificatie. Deze specifieke indelingsspecificatie wordt gebruikt om een valutabedrag weer te geven.
We kunnen hetzelfde resultaat ook krijgen door een aangepaste tekenreeks voor numerieke notatie te gebruiken.
Voorbeeld 2 – Tekenreeks voor aangepaste opmaak
Dit voorbeeld levert dezelfde uitvoer op als het vorige voorbeeld. Het verschil is dat ik in dit voorbeeld een aangepaste . gebruik formatteertekenreeks in plaats van een standaardtekenreeks.
SELECT FORMAT(1234, '$#,###.00') AS Result;
Resultaat:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
Een aangepaste opmaaktekenreeks stelt u in staat om uw eigen aangepaste formaat te maken. U kunt tekenreeksen combineren met indelingsspecificaties om uw eigen aangepaste indeling te maken.
In dit voorbeeld gebruik ik de #
formaatspecificatie, een tijdelijke aanduiding voor een cijfer. Als er geen cijfer aanwezig is, verschijnt er geen cijfer in de resulterende reeks.
Ik gebruik ook de 0
formaatspecificatie, die ook een tijdelijke aanduiding is voor elk cijfer. Maar in dit geval, als een cijfer niet aanwezig is, wordt in plaats daarvan een nul gebruikt.
Ik voeg ook de $
. toe , ,
, en .
letterlijke tekenreeksen in de opmaakreeks. Deze worden precies zo in de output opgenomen.
Als we het invoergetal verminderen, kunnen we zien hoe het resultaat verschilt tussen de 0
en #
formaatspecificaties, en hoe ze zich verhouden tot de C
standaardformaatspecificatie uit het vorige voorbeeld:
SELECT FORMAT(34, 'C') AS 'C', FORMAT(34, '$0,000.00') AS '0', FORMAT(34, '$#,###.00') AS '#';
Resultaat:
+--------+-----------+--------+ | C | 0 | # | |--------+-----------+--------| | $34.00 | $0,034.00 | $34.00 | +--------+-----------+--------+
Zoals je je misschien kunt voorstellen, bieden strings met aangepaste formaten veel meer flexibiliteit dan strings met standaardformaten.
Er zijn echter veel scenario's waarin strings in standaardformaat krachtiger kunnen zijn, vooral als het gaat om het produceren van dynamische resultaten die rekening houden met de cultuur. Binnenkort meer over cultuur.
Voorbeeld 3 – Datum en tijd formatteren
Datum/tijd-waarden bieden ook de keuze uit standaard- of aangepaste formaatstrings. Hier is een voorbeeld van een datum/tijd-waarde die is opgemaakt met een standaardnotatietekenreeks, evenals enkele aangepaste notatietekenreeksen.
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';
Resultaat:
+----------+------------+------------+-------------------+------------------------+ | 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 | +----------+------------+------------+-------------------+------------------------+
De eerste gebruikt een standaard formaat string, en de andere vier gebruiken custom format strings.
Zie het volgende voor een volledige lijst van beschikbare tekenreeksen voor datum- en tijdnotatie:
- Lijst van de standaard tekenreeksen voor datum-/tijdnotatie
- Lijst van de aangepaste datum-/tijdnotatiereeksen
Voorbeeld 4 – Cultuur
De resultaten van opmaakstrings kunnen soms afhangen van de cultuur die wordt gebruikt. In de VS wordt een korte datumnotatie bijvoorbeeld weergegeven als 'M/d/jjjj', maar in Groot-Brittannië wordt het weergegeven als 'dd/MM/jjjj'.
Standaard wordt de taal van de huidige sessie gebruikt om de cultuur te definiëren. Echter, de FORMAT()
functie stelt u in staat dit te negeren.
De syntaxis van de functie gaat als volgt:
FORMAT ( value, format [, culture ] )
U kunt dus een cultuur specificeren als een optioneel argument.
Hier is een voorbeeld van waar verschillende culturen kunnen resulteren in een enkele format string die een aantal verschillende formaten produceert.
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';
Resultaat:
+--------------+------------+------------+------------+ | US English | British | German | Japanese | |--------------+------------+------------+------------| | 5/1/2080 | 01/05/2080 | 01.05.2080 | 05/01/2080 | +--------------+------------+------------+------------+
In dit geval gebruiken alle vier de landen de d
standaard tekenreeks voor datum- en tijdnotatie. Ze gebruiken echter allemaal een ander cultuurargument. Dit levert voor elke cultuur een ander resultaat op.
En het is niet alleen standaard format strings die worden beïnvloed door cultuur. Cultuur kan ook het resultaat van custom beïnvloeden tekenreeksen opmaken. Hier is een voorbeeld:
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';
Resultaat:
+-------------------+------------------+----------------------+----------------+ | US English | German | Vietnamese | Swedish | |-------------------+------------------+----------------------+----------------| | Wednesday, 01 May | Mittwoch, 01 Mai | Thứ Tư, 01 Tháng Năm | onsdag, 01 maj | +-------------------+------------------+----------------------+----------------+
Je hebt ook de mogelijkheid om de invariante cultuur te gebruiken (iv
). De invariante cultuur is cultuurongevoelig. Het wordt geassocieerd met de Engelse taal, maar niet met een land/regio. Zie voor meer informatie en voorbeelden Hoe u de invariante cultuur specificeert bij het gebruik van FORMAT() in SQL Server.