Проблем:
Искате да промените формата на поле за дата или стойност в база данни на SQL Server.
Пример:
Нашата база данни има таблица с име Patient с данни в колоните Id , FirstName , LastName и RegistrationDate .
| Id | Име | Фамилия | Дата на регистрация |
|---|---|---|---|
| 1 | Джейн | Уилямс | 20.06.2019 |
| 2 | Габриел | Кафяв | 2019-02-02 |
| 3 | Лора | Народен | 05.11.2016 |
Нека променим формата на датата на регистрация на всеки пациент. Първо ще поставим името на делничния ден, последвано от деня и името на месеца и 4-цифрена година (напр. „петък, 27 декември 2019 г.“).
Решение:
Ще използваме функцията FORMAT(), за да променим формата на датата в RegistrationDate колона.
SELECT FirstName,
LastName,
FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy')
AS FormattedRegistrationDate
FROM Patient;
Ето резултата от заявката:
| First Name | Фамилия | FormattedRegistrationDate |
|---|---|---|
| Джейн | Уилямс | Четвъртък, 20 юни 2019 г. |
| Габриел | Кафяв | Събота, 2 февруари 2019 г. |
| Лора | Народен | Събота, 5 ноември 2016 г. |
Дискусия:
Можем да променим как се показва дадена дата с функцията FORMAT(). Тази функция приема два задължителни аргумента и един незадължителен аргумент. В нашия пример използвахме само двата задължителни аргумента. Първият е дата, която може да бъде от колона дата/час/дата и час или всеки израз, който връща дата или час. (В нашия пример използваме колоната RegistrationDate .) Вторият аргумент е низ, съдържащ новия формат на датата. В нашия пример използвахме 'dddd, dd MMMM, yyyy' :
- dddd – Името на деня от седмицата.
- г – Денят от месеца, от 1 до 31.
- ММММ – Пълното име на месеца.
- гггг – Четирицифрената година.
Таблицата по-долу представя повече спецификатори на формата на дата/час:
| спецификатор | описание |
|---|---|
| d | Ден в диапазона 1-31 |
| dd | Ден в диапазона 01-31 |
| ddd | Съкратеното име на деня от седмицата |
| dddd | Пълното име на деня от седмицата |
| M | Месец от 1 до 12 |
| MM | Месец от 01 до 12 |
| МММ | Съкратеното име на месеца |
| ММММ | Пълното име на месеца |
| y | 2-цифрена година, от 0 до 99 |
| yy | 2-цифрена година от 00 до 99 |
| гггг | 4-цифрена година |
| g | Епоха (напр. н. е.) |
| h | Час от 1 до 12 (12-часов часовник) |
| hh | Час от 01 до 12 (12-часов часовник) |
| H | Час от 0 до 23 (24-часов часовник) |
| HH | Час от 00 до 23 (24-часов часовник) |
| m | Минута от 0 до 59 |
| mm | Минута от 00 до 59 |
| s | Втори от 0 до 59 |
| ss | Втори от 00 до 59 |
| t | Първи знак от AM или PM (напр. 9A, 5P) |
| tt | AM или PM |
| z | Изместване на часовете, без водеща нула (напр. +3) |
| zz | Изместване на часовете, с водеща нула (напр. +03) |
Можете да научите повече в документацията на Microsoft за стандартни формати за дата и час и персонализирани формати.
Ако искате да форматирате тази дата за конкретен език и/или държава, използвайте третия незадължителен аргумент:култура . Този аргумент е низ, съдържащ културния код за конкретен регион или държава. (Културните кодове се състоят от езиков код, тире и код на държавата.) В примера по-долу използваме културния код за Германия, който комбинира кода на немския език („de“) с кода на държавата за Германия („DE“), т.е. „de-DE“. Получената дата се показва на немски и е форматирана така, както германската публика би очаквала да я види.
SELECT FirstName,
LastName,
FORMAT(RegistrationDate ,'dddd, d MMMM, yyyy', 'de-DE')
AS FormattedRegistrationDate
FROM Patient;
Ето резултата от тази заявка:
| First Name | Фамилия | Дата на регистрация |
|---|---|---|
| Джейн | Уилямс | Донерстаг, 20 юни 2019 г. |
| Габриел | Кафяв | Самстаг, 2 февруари 2019 г. |
| Лора | Народен | Самстаг, 5 ноември 2016 г. |