sql >> Database >  >> RDS >> Sqlserver

Aangepaste tekenreeksen voor datum-/tijdnotatie ondersteund door FORMAT() in SQL Server

Dit artikel bevat een referentie voor de aangepaste datum- en tijdnotatiespecificaties die kunnen worden gebruikt bij het opmaken van datums en/of tijden met behulp van de FORMAT() functie in SQL Server, samen met voorbeelden.

U kunt elk van deze indelingsspecificaties combineren om een ​​aangepaste indelingsreeks te maken. Zie hieronder voor een codevoorbeeld en een uitleg over hoe strings met aangepaste opmaak werken.

De voorbeelden in de tabel gaan uit van een datetimeoffset waarde van 2080-05-01 23:09:08.1234567 +07:00 .

Tekenreeks opmaken Beschrijving Voorbeeld
d De dag van de maand, van 1 tot en met 31. 1
dd De dag van de maand, van 01 tot en met 31. 01
ddd De afgekorte naam van de dag van de week. Woe
dddd De volledige naam van de dag van de week. Woensdag
f De tienden van een seconde in een datum- en tijdwaarde. 1
ff De honderdsten van een seconde in een datum- en tijdwaarde. 12
fff De milliseconden in een datum- en tijdwaarde. 123
ffff De tienduizendste van een seconde in een datum- en tijdwaarde. 1234
fffff De honderdduizendsten van een seconde in een datum- en tijdwaarde. 12345
fffff De miljoenste van een seconde in een datum- en tijdwaarde. 123456
fffffff De tien miljoenste van een seconde in een datum- en tijdwaarde. 1234567
F Indien niet nul, de tienden van een seconde in een datum- en tijdwaarde. 1
FF Indien niet nul, de honderdsten van een seconde in een datum- en tijdwaarde. 12
FFF Indien niet nul, de milliseconden in een datum- en tijdwaarde. 123
FFFF Indien niet nul, de tienduizendste van een seconde in een datum- en tijdwaarde. 1234
FFFFF Indien niet nul, de honderdduizendsten van een seconde in een datum- en tijdwaarde. 12345
FFFFFF Indien niet nul, de miljoenste van een seconde in een datum- en tijdwaarde. 123456
FFFFFFF Indien niet nul, de tien miljoenste van een seconde in een datum- en tijdwaarde. 1234567
g De periode of het tijdperk. AD.
gg De periode of het tijdperk. AD.
h Het uur, met een 12-uurs klok van 1 tot 12. 11
hh Het uur, met een 12-uurs klok van 01 tot 12. 11
H Het uur, met een 24-uurs klok van 0 tot 23. 23
HH Het uur, met een 24-uurs klok van 00 tot 23. 23
K Tijdzone-informatie. +07:00
m De minuut, van 0 tot en met 59. 9
mm De minuut, van 00 tot 59. 09
M De maand, van 1 tot en met 12. 5
MM De maand, van 01 tot en met 12. 05
MMM De afgekorte naam van de maand. Mei
MMMM De volledige naam van de maand. Mei
s De tweede, van 0 tot 59. 8
ss De tweede, van 00 tot 59. 08
t Het eerste teken van de AM/PM-aanduiding. P
tt De AM/PM-aanduiding. PM
y Het jaar, van 0 tot 99. 80
yy Het jaar, van 00 tot 99. 80
yyy Het jaar, met minimaal drie cijfers. 2080
yyyy Het jaartal als een getal van vier cijfers. 2080
yyyyy Het jaar als een getal van vijf cijfers. 02080
z Uren verschoven vanaf UTC, zonder voorloopnullen. +7
zz Uren verschoven vanaf UTC, met een voorloopnul voor een waarde van één cijfer. +07
zzz Uren en minuten verschoven ten opzichte van UTC. +07:00
: Het tijdscheidingsteken. :
/ Het datumscheidingsteken. /
"string" Letterlijk tekenreeksscheidingsteken. tekenreeks
% Definieert het volgende teken als een aangepaste indelingsspecificatie.
\ Het escape-teken.

Elk ander teken wordt ongewijzigd naar de resultaatreeks gekopieerd.

Belangrijk: Als u een tekenreeks met een aangepaste notatie van één teken gebruikt, moet u deze vooraf laten gaan door het procentteken (% ). Als alternatief kunt u een spatie toevoegen. Als u dit niet doet, krijgt u ofwel NULL, of de formaatspecificatie kan worden geïnterpreteerd als een standaardformaatspecificatie en u krijgt onbedoelde resultaten.

Wat zijn Custom Format Strings?

Een tekenreeks voor aangepaste indelingen bestaat uit een of meer specificaties voor aangepaste indelingen. De bovenstaande tabel bevat de aangepaste indelingsspecificaties die beschikbaar zijn voor het opmaken van datum- en tijdwaarden in een tekenreeks.

Er zijn ook standaard strings voor datum- en tijdnotatie. Elk van deze is een alias voor een tekenreeks met aangepaste indeling. Strings met standaardopmaak bestaan ​​uit een enkele opmaakspecificatie, dus ze zijn sneller te gebruiken (maar minder flexibel dan strings met aangepaste opmaak).

Elke notatietekenreeks die geen standaard datum- en tijdnotatietekenreeks is, wordt geïnterpreteerd als een aangepaste datum- en tijdnotatietekenreeks.

Gebruiksvoorbeeld

De manier waarop specificaties voor aangepaste opmaak werken, is dat u ze kunt combineren om een ​​tekenreeks voor aangepaste opmaak te vormen bij gebruik van de FORMAT() functie. Dit bepaalt hoe het resultaat wordt opgemaakt.

Hier zijn enkele voorbeelden:

DECLARE @date datetimeoffset;
SET @date = '2080-05-01 23:09:08.1234567 +07:00';
SELECT 
  FORMAT(@date, 'd, MMM yy') AS 'd, MMM yy',
  FORMAT(@date, 'dd, MMMM yyyy') AS 'dd, MMMM yyyy',
  FORMAT(@date, 'dddd, MMM dd yyyy') AS 'dddd, MMM dd yyyy',
  FORMAT(@date, 'hh:mm:ss') AS 'hh:mm:ss',
  FORMAT(@date, 'hh:mm tt') AS 'hh:mm tt';

Resultaat:

+-------------+-----------------+------------------------+------------+------------+
| d, MMM yy   | dd, MMMM yyyy   | dddd, MMM dd yyyy      | hh:mm:ss   | hh:mm tt   |
|-------------+-----------------+------------------------+------------+------------|
| 1, May 80   | 01, May 2080    | Wednesday, May 01 2080 | 11:09:08   | 11:09 PM   |
+-------------+-----------------+------------------------+------------+------------+

Het biedt dus veel flexibiliteit in de manier waarop u uw datums en tijden presenteert.

Hier is een voorbeeld van het gebruik van een opmaakreeks die bestaat uit een enkele opmaakspecificatie.

DECLARE @date datetimeoffset;
SET @date = '2080-05-01 23:09:08.1234567 +07:00';
SELECT 
  FORMAT(@date, '%d') AS '%d',
  FORMAT(@date, '%M') AS '%M',
  FORMAT(@date, '%K') AS '%K',
  FORMAT(@date, '%z') AS '%z';

Resultaat:

+------+------+--------+------+
| %d   | %M   | %K     | %z   |
|------+------+--------+------|
| 1    | 5    | +07:00 | +7   |
+------+------+--------+------+

Zoals vermeld, moet u deze met een percentageteken toevoegen om te voorkomen dat u NULL krijgt en zodat de formaatspecificatie niet per ongeluk wordt geïnterpreteerd als een standaardnotatietekenreeks.

Dit gebeurt er als ik het procentteken uit het vorige voorbeeld verwijder:

DECLARE @date datetimeoffset;
SET @date = '2080-05-01 23:09:08.1234567 +07:00';
SELECT 
  FORMAT(@date, 'd') AS 'd',
  FORMAT(@date, 'M') AS 'M',
  FORMAT(@date, 'K') AS 'K',
  FORMAT(@date, 'z') AS 'z';

Resultaat:

+----------+-------+------+------+
| d        | M     | K    | z    |
|----------+-------+------+------|
| 5/1/2080 | May 1 | NULL | NULL |
+----------+-------+------+------+

We krijgen een heel ander resultaat.


  1. Hoe een lijst met tabellen te krijgen zonder primaire sleutelbeperking in alle databases van SQL Server-instantie - SQL Server / TSQL-zelfstudie, deel 62

  2. Een externe MySQL-databaseverbinding instellen

  3. Fix "Ten minste één van de argumenten voor COALESCE moet een expressie zijn die niet de NULL-constante is" in SQL Server

  4. Geen resultaten geretourneerd door de Query-fout in PostgreSQL