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 |