Problém:
Chcete změnit formát pole data nebo hodnoty v databázi SQL Server.
Příklad:
Naše databáze obsahuje tabulku s názvem Patient
s údaji ve sloupcích Id
, FirstName
, LastName
a RegistrationDate
.
Id | Jméno | Příjmení | Datum registrace |
---|---|---|---|
1 | Jane | Williams | 20. 6. 2019 |
2 | Gabriel | Hnědá | 2019-02-02 |
3 | Lora | Lidové | 2016-11-05 |
Změňme formát data registrace každého pacienta. Nejprve uvedeme název dne v týdnu, poté měsíc, den a jméno a čtyřmístný rok (např. „Pátek, 27. prosince 2019“).
Řešení:
Ke změně formátu data v RegistrationDate
použijeme funkci FORMAT(). sloupec.
SELECT FirstName, LastName, FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy') AS FormattedRegistrationDate FROM Patient;
Zde je výsledek dotazu:
Jméno | Příjmení | FormattedRegistrationDate |
---|---|---|
Jane | Williams | Čtvrtek, 20. června 2019 |
Gabriel | Hnědá | Sobota, 2. února 2019 |
Lora | Lidové | Sobota 5. listopadu 2016 |
Diskuse:
Pomocí funkce FORMAT() můžeme změnit způsob zobrazení daného data. Tato funkce má dva povinné argumenty a jeden volitelný argument. V našem příkladu jsme použili pouze dva povinné argumenty. První je datum, které může být ze sloupce datum/čas/datum a čas nebo jakýkoli výraz, který vrací datum nebo čas. (V našem příkladu používáme sloupec RegistrationDate
.) Druhým argumentem je řetězec obsahující nový formát data. V našem příkladu jsme použili 'dddd, dd MMMM, yyyy' :
- dddd – Název dne v týdnu.
- d – Den v měsíci, od 1 do 31.
- MMMM – Celý název měsíce.
- yyyy – Čtyřmístný rok.
Níže uvedená tabulka uvádí další specifikátory formátu data/času:
specifier | popis |
---|---|
d | Den v rozmezí 1–31 |
dd | Den v rozmezí 01-31 |
ddd | Zkrácený název dne v týdnu |
dddd | Celý název dne v týdnu |
M | Měsíc od 1 do 12 |
MM | Měsíc od 1. do 12. |
MMM | Zkrácený název měsíce |
MMMM | Celý název měsíce |
y | 2místný rok, od 0 do 99 |
yy | Dvoumístný rok od 00 do 99 |
yyyy | 4místný rok |
g | Éra (např. A.D.) |
h | Hodina od 1 do 12 (12hodinový formát) |
hh | Hodina od 01 do 12 (12 hodin) |
H | Hodina od 0 do 23 (24hodinový formát) |
HH | Hodina od 00 do 23 (24hodinový formát) |
m | minuta od 0 do 59 |
mm | minuta od 00 do 59 |
s | Druhá od 0 do 59 |
ss | Druhá od 00 do 59 |
t | První znak AM nebo PM (např. 9A, 5P) |
tt | AM nebo PM |
z | Posun hodin, bez úvodní nuly (např. +3) |
zz | Posun hodin s úvodní nulou (např. +03) |
Další informace naleznete v dokumentaci společnosti Microsoft pro standardní formáty data a času a vlastní formáty.
Pokud byste chtěli toto datum naformátovat pro konkrétní jazyk a/nebo zemi, použijte třetí volitelný argument:kultura . Tento argument je řetězec obsahující kód kultury pro konkrétní oblast nebo zemi. (Kódy kultury se skládají z kódu jazyka, pomlčky a kódu země.) V níže uvedeném příkladu používáme kód kultury pro Německo, který kombinuje německý kód jazyka („de“) s kódem země pro Německo. ('DE'), tj. 'de-DE'. Výsledné datum je zobrazeno v němčině a naformátováno tak, jak by jej německé publikum očekávalo.
SELECT FirstName, LastName, FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy', 'de-DE') AS FormattedRegistrationDate FROM Patient;
Zde je výsledek tohoto dotazu:
Jméno | Příjmení | Datum registrace |
---|---|---|
Jane | Williams | Donnerstag, 20. června 2019 |
Gabriel | Hnědá | Samstag, 2. února 2019 |
Lora | Lidové | Samstag, 5. listopadu 2016 |