Проблем:
Искате да промените формата на поле за дата или стойност в база данни на 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 г. |