Ten artykuł zawiera odniesienie do niestandardowych specyfikatorów formatu daty i godziny, których można używać podczas formatowania dat i/lub godzin za pomocą FORMAT()
funkcji w SQL Server, wraz z przykładami.
Możesz połączyć dowolne z tych specyfikatorów formatu, aby utworzyć dostosowany ciąg formatu. Zobacz poniżej przykład kodu i wyjaśnienie, jak działają niestandardowe ciągi formatu.
Przykłady w tabeli zakładają przesunięcie daty i godziny wartość 2080-05-01 23:09:08.1234567 +07:00
.
ciąg formatu | Opis | Przykład |
---|---|---|
d | Dzień miesiąca, od 1 do 31. | 1 |
dd | Dzień miesiąca, od 01 do 31. | 01 |
ddd | Skrócona nazwa dnia tygodnia. | Środa |
dddd | Pełna nazwa dnia tygodnia. | środa |
f | Ułamki dziesiąte sekundy w wartości daty i godziny. | 1 |
ff | Sekundy setne sekundy w wartości daty i godziny. | 12 |
fff | Milisekundy w wartości daty i godziny. | 123 |
ffff | Dziesięć tysięcznych sekundy w wartości daty i godziny. | 1234 |
fffff | Stoty tysięczne sekundy w wartości daty i godziny. | 12345 |
fffff | Milionowe części sekundy w wartości daty i godziny. | 123456 |
fffffff | Dziesięć milionowych części sekundy w wartości daty i godziny. | 1234567 |
F | Jeśli niezerowe, dziesiąte części sekundy w wartości daty i czasu. | 1 |
FF | Jeśli niezerowe, setne części sekundy w wartości daty i godziny. | 12 |
FFF | Jeśli niezerowe, milisekundy w wartości daty i czasu. | 123 |
FFFF | Jeśli niezerowe, dziesięć tysięcznych sekundy w wartości daty i godziny. | 1234 |
FFFFF | Jeśli niezerowe, setne tysięczne sekundy w wartości daty i godziny. | 12345 |
FFFFFF | Jeśli niezerowe, milionowe części sekundy w wartości daty i godziny. | 123456 |
FFFFFFF | Jeśli niezerowe, dziesięć milionowych części sekundy w wartości daty i godziny. | 1234567 |
g | Okres lub era. | AD |
gg | Okres lub era. | AD |
h | Godzina przy użyciu zegara 12-godzinnego od 1 do 12. | 11 |
hh | Godzina, przy użyciu zegara 12-godzinnego od 01 do 12. | 11 |
H | Godzina przy użyciu zegara 24-godzinnego od 0 do 23. | 23 |
HH | Godzina przy użyciu 24-godzinnego zegara od 00 do 23. | 23 |
K | Informacje o strefie czasowej. | +07:00 |
m | Minuta, od 0 do 59. | 9 |
mm | Minuta, od 00 do 59. | 09 |
M | Miesiąc, od 1 do 12. | 5 |
MM | Miesiąc, od 01 do 12. | 05 |
MMM | Skrócona nazwa miesiąca. | maj |
MMMM | Pełna nazwa miesiąca. | maj |
s | Drugi, od 0 do 59. | 8 |
ss | Drugi, od 00 do 59. | 08 |
t | Pierwszy znak oznaczenia AM/PM. | P |
tt | Oznacznik AM/PM. | PM |
y | Rok, od 0 do 99. | 80 |
yy | Rok, od 00 do 99. | 80 |
yyy | Rok z minimum trzema cyframi. | 2080 |
yyy | Rok jako liczba czterocyfrowa. | 2080 |
yyy | Rok jako liczba pięciocyfrowa. | 02080 |
z | Przesunięcie godzin względem UTC, bez zer wiodących. | +7 |
zz | Przesunięcie godzin względem UTC, z wiodącym zerem dla wartości jednocyfrowej. | +07 |
zzz | Godziny i minuty przesunięte względem UTC. | +07:00 |
: | Separator czasu. | : |
/ | Separator daty. | / |
"string" | Dosłowny ogranicznik ciągu. | ciąg |
% | Definiuje następujący znak jako specyfikator formatu niestandardowego. | |
\ | Znak ucieczki. |
Każdy inny znak jest kopiowany do ciągu wynikowego bez zmian.
Ważne: Używając jednoznakowego ciągu formatu niestandardowego, należy poprzedzić go znakiem procentu (%
). Alternatywnie możesz dodać spację. Jeśli tego nie zrobisz, otrzymasz albo NULL, albo specyfikator formatu może być zinterpretowany jako specyfikator formatu standardowego i otrzymasz niezamierzone wyniki.
Co to są niestandardowe ciągi formatujące?
Ciąg formatu niestandardowego składa się z co najmniej jednego specyfikatora formatu niestandardowego. W powyższej tabeli wymieniono specyfikatory formatu niestandardowego dostępne do formatowania wartości daty i godziny w ciągu.
Istnieją również standardowe ciągi formatu daty i godziny. Każdy z nich jest aliasem niestandardowego ciągu formatu. Standardowe ciągi formatujące składają się z jednego specyfikatora formatu, więc są szybsze w użyciu (ale mniej elastyczne niż niestandardowe ciągi formatujące).
Każdy ciąg formatu, który nie jest standardowym ciągiem formatu daty i godziny, jest interpretowany jako niestandardowy ciąg formatu daty i godziny.
Przykład użycia
Sposób, w jaki działają specyfikatory formatu niestandardowego, polega na tym, że można je połączyć, aby utworzyć ciąg formatu niestandardowego podczas korzystania z FORMAT()
funkcjonować. To określa sposób formatowania wyniku.
Oto kilka przykładów:
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';
Wynik:
+-------------+-----------------+------------------------+------------+------------+ | 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 | +-------------+-----------------+------------------------+------------+------------+
Pozwala więc na dużą elastyczność w prezentowaniu dat i godzin.
Oto przykład użycia ciągu formatu zawierającego pojedynczy specyfikator formatu.
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';
Wynik:
+------+------+--------+------+ | %d | %M | %K | %z | |------+------+--------+------| | 1 | 5 | +07:00 | +7 | +------+------+--------+------+
Jak wspomniano, należy poprzedzić je znakiem procentu, aby uniknąć uzyskania wartości NULL i aby specyfikator formatu nie został przypadkowo zinterpretowany jako standardowy ciąg formatu.
Oto, co się stanie, jeśli usunę znak procentu z poprzedniego przykładu:
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';
Wynik:
+----------+-------+------+------+ | d | M | K | z | |----------+-------+------+------| | 5/1/2080 | May 1 | NULL | NULL | +----------+-------+------+------+
Otrzymujemy zupełnie inny wynik.