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 |