Problem:
Chcesz zmienić format pola daty lub wartości w bazie danych SQL Server.
Przykład:
Nasza baza danych zawiera tabelę o nazwie Patient z danymi w kolumnach Id , FirstName , LastName i RegistrationDate .
| Identyfikator | Imię | Nazwisko | Data rejestracji |
|---|---|---|---|
| 1 | Jana | Williams | 2019-06-20 |
| 2 | Gabriel | Brązowy | 02.02.2019 |
| 3 | Lora | Ludowe | 05.11.2016 |
Zmieńmy format daty rejestracji każdego pacjenta. Najpierw umieścimy nazwę dnia tygodnia, a następnie dzień i nazwę miesiąca oraz 4-cyfrowy rok (np. „piątek, 27 grudnia 2019 r.”).
Rozwiązanie:
Użyjemy funkcji FORMAT(), aby zmienić format daty w RegistrationDate kolumna.
SELECT FirstName,
LastName,
FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy')
AS FormattedRegistrationDate
FROM Patient;
Oto wynik zapytania:
| Imię | Nazwisko | Sformatowana data rejestracji |
|---|---|---|
| Jana | Williams | Czwartek, 20 czerwca 2019 r. |
| Gabriel | Brązowy | sobota, 2 lutego 2019 r. |
| Lora | Ludowe | Sobota, 5 listopada 2016 |
Dyskusja:
Możemy zmienić sposób wyświetlania danej daty za pomocą funkcji FORMAT(). Ta funkcja pobiera dwa argumenty obowiązkowe i jeden argument opcjonalny. W naszym przykładzie użyliśmy tylko dwóch obowiązkowych argumentów. Pierwsza to data, która może pochodzić z kolumny data/godzina/data/godzina lub dowolnego wyrażenia zwracającego datę lub godzinę. (W naszym przykładzie używamy kolumny RegistrationDate .) Drugim argumentem jest ciąg znaków zawierający nowy format daty. W naszym przykładzie użyliśmy 'dddd, dd MMMM, rrrr' :
- dddd – Nazwa dnia tygodnia.
- d – Dzień miesiąca, od 1 do 31.
- MMMM – Pełna nazwa miesiąca.
- rrrr – Rok czterocyfrowy.
Poniższa tabela przedstawia więcej specyfikatorów formatu daty/czasu:
| specyfikator | opis |
|---|---|
| d | Dzień w zakresie 1-31 |
| dd | Dzień w zakresie 01-31 |
| ddd | Skrócona nazwa dnia tygodnia |
| dddd | Pełna nazwa dnia tygodnia |
| M | Miesiąc od 1 do 12 |
| MM | Miesiąc od 01 do 12 |
| MMM | Skrócona nazwa miesiąca |
| MMMM | Pełna nazwa miesiąca |
| y | Rok dwucyfrowy, od 0 do 99 |
| rr | 2-cyfrowy rok od 00 do 99 |
| rrrr | 4-cyfrowy rok |
| g | Epoka (np. AD) |
| h | Godzina od 1 do 12 (zegar 12-godzinny) |
| hh | Godzina od 01 do 12 (zegar 12-godzinny) |
| H | Godzina od 0 do 23 (zegar 24-godzinny) |
| GG | Godzina od 00 do 23 (zegar 24-godzinny) |
| m | Minuta od 0 do 59 |
| mm | Minuta od 00 do 59 |
| s | Sekunda od 0 do 59 |
| ss | Sekunda od 00 do 59 |
| t | Pierwszy znak AM lub PM (np. 9A, 5P) |
| tt | przed południem lub po południu |
| z | Przesunięcie godzin, bez wiodącego zera (np. +3) |
| zz | Przesunięcie godzin, z wiodącym zerem (np. +03) |
Więcej informacji na temat standardowych formatów daty i godziny oraz formatów niestandardowych znajdziesz w dokumentacji firmy Microsoft.
Jeśli chcesz sformatować tę datę dla konkretnego języka i/lub kraju, użyj trzeciego opcjonalnego argumentu:kultura . Ten argument jest ciągiem zawierającym kod kultury dla określonego regionu lub kraju. (Kody kultury składają się z kodu języka, myślnika i kodu kraju.) W poniższym przykładzie używamy kodu kultury dla Niemiec, który łączy kod języka niemieckiego („de”) z kodem kraju dla Niemiec („DE”), tj. „de-DE”. Wynikowa data jest wyświetlana w języku niemieckim i sformatowana zgodnie z oczekiwaniami niemieckich odbiorców.
SELECT FirstName,
LastName,
FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy', 'de-DE')
AS FormattedRegistrationDate
FROM Patient;
Oto wynik tego zapytania:
| Imię | Nazwisko | Data rejestracji |
|---|---|---|
| Jana | Williams | Donnerstag, 20 czerwca 2019 r. |
| Gabriel | Brązowy | Samstag, 2 lutego 2019 r. |
| Lora | Ludowe | Samstag, 5 listopada 2016 |