Перейти к содержимому
Последнее обновление

DATE_FORMAT

Описание​

Функция DATE_FORMAT преобразует значение даты или времени в строку в соответствии с заданной строкой формата (format). Она поддерживает форматирование значений типов DATE (только дата) и DATETIME (дата и время) и возвращает строку, соответствующую заданному формату.

Поведение этой функции соответствует поведению функции date_format в MySQL.

Синтаксис​

DATE_FORMAT(<date_or_time_expr>, <format>)

Параметры​

ПараметрОписание
<date_or_time_expr>Корректное значение даты типа datetime или date. Сведения о допустимых форматах datetime и date см. в разделах преобразование datetime и преобразование date
<format>Задаёт формат вывода даты/времени; имеет тип varchar

Поддерживаемые спецификаторы формата:

Спецификатор форматаОписание
%aСокращённое название дня недели (3 буквы)
%bСокращённое название месяца (3 буквы)
%cМесяц в числовом виде (0-12)
%DДень месяца с английским суффиксом (0th, 1st, 2nd, 3rd, …)
%dДень месяца в числовом виде (00-31)
%eДень месяца в числовом виде (0-31)
%fМикросекунды (000000-999999)
%HЧас (00-23)
%hЧас (01-12)
%IЧас (01-12)
%iМинуты в числовом виде (00-59)
%jДень года (001-366)
%kЧас (0-23)
%lЧас (1-12)
%MНазвание месяца
%mМесяц в числовом виде (00-12)
%pAM или PM
%rВремя в 12-часовом формате (hh:mm:ss с последующим AM или PM)
%SСекунды (00-59)
%sСекунды (00-59)
%TВремя в 24-часовом формате (hh:mm:ss)
%UНеделя (00-53), где первым днём недели считается воскресенье; режим 0 функции week
%uНеделя (00-53), где первым днём недели считается понедельник; режим 1 функции week
%VНеделя (01-53), где первым днём недели считается воскресенье; режим 2 функции week, используется с %X
%vНеделя (01-53), где первым днём недели считается понедельник; режим 3 функции week, используется с %x
%WПолное название дня недели (воскресенье-суббота)
%wДень недели (0 = воскресенье, 6 = суббота)
%XГод для системы отсчёта недель с воскресенья (4 цифры), используется с %V
%xГод для системы отсчёта недель с понедельника (4 цифры), используется с %v
%YГод (4 цифры)
%yГод (2 цифры)
%%Обозначает символ %
%xДля любого x, не указанного выше, обозначает сам x

Также доступны три специальных формата:

yyyyMMdd --corresponds to standard format specifier:%Y%m%d
yyyy-MM-dd --corresponds to standard format specifier:%Y-%m-%d
yyyy-MM-dd HH:mm:ss --corresponds to standard format specifier:%Y-%m-%d %H:%i:%s

Возвращаемое значение​

Отформатированная строка даты типа Varchar.

Особые случаи:

  • Если format равен NULL, возвращается NULL.
  • Если любой из параметров равен NULL, возвращается NULL.
  • Если длина входного значения превышает 128 символов, возвращается ошибка.
  • Если длина результата превышает 102 символа, возвращается ошибка.

Примеры​

-- Output weekday name, month name, and 4-digit year
select date_format(cast('2009-10-04 22:23:00' as datetime), '%W %M %Y');

+------------------------------------------------------------------+
| date_format(cast('2009-10-04 22:23:00' as datetime), '%W %M %Y') |
+------------------------------------------------------------------+
| Sunday October 2009 |
+------------------------------------------------------------------+

-- Output time in 24-hour format (hour:minute:second)
select date_format('2007-10-04 22:23:00', '%H:%i:%s');

+------------------------------------------------+
| date_format('2007-10-04 22:23:00', '%H:%i:%s') |
+------------------------------------------------+
| 22:23:00 |
+------------------------------------------------+

-- Combine multiple format specifiers and plain characters
select date_format('1900-10-04 22:23:00', 'Day: %D, Year: %y, Month: %b, DayOfYear: %j');

+-----------------------------------------------------------------------------------+
| date_format('1900-10-04 22:23:00', 'Day: %D, Year: %y, Month: %b, DayOfYear: %j') |
+-----------------------------------------------------------------------------------+
| Day: 4th, Year: 00, Month: Oct, DayOfYear: 277 |
+-----------------------------------------------------------------------------------+

-- %X (year) used with %V (week number), where Sunday is the first day of the week
select date_format('1999-01-01 00:00:00', '%X-%V');

+---------------------------------------------+
| date_format('1999-01-01 00:00:00', '%X-%V') |
+---------------------------------------------+
| 1998-52 |
+---------------------------------------------+

-- Output the % character (escaped with %%)
select date_format(cast('2006-06-01' as date), '%%%d/%m');

+----------------------------------------------------+
| date_format(cast('2006-06-01' as date), '%%%d/%m') |
+----------------------------------------------------+
| %01/06 |
+----------------------------------------------------+

-- Special format yyyy-MM-dd HH:mm:ss
select date_format('2023-12-31 23:59:59', 'yyyy-MM-dd HH:mm:ss');
+-----------------------------------------------------------+
| date_format('2023-12-31 23:59:59', 'yyyy-MM-dd HH:mm:ss') |
+-----------------------------------------------------------+
| 2023-12-31 23:59:59 |
+-----------------------------------------------------------+

-- String that does not reference any time information
select date_format('2023-12-31 23:59:59', 'ghg');
+-------------------------------------------+
| date_format('2023-12-31 23:59:59', 'ghg') |
+-------------------------------------------+
| ghg |
+-------------------------------------------+

-- Special format yyyyMMdd
select date_format('2023-12-31 23:59:59', 'yyyyMMdd');
+------------------------------------------------+
| date_format('2023-12-31 23:59:59', 'yyyyMMdd') |
+------------------------------------------------+
| 20231231 |
+------------------------------------------------+

-- Special format yyyy-MM-dd
select date_format('2023-12-31 23:59:59', 'yyyy-MM-dd');
+--------------------------------------------------+
| date_format('2023-12-31 23:59:59', 'yyyy-MM-dd') |
+--------------------------------------------------+
| 2023-12-31 |
+--------------------------------------------------+

-- Parameter is null
mysql> select date_format(NULL, '%Y-%m-%d');
+-------------------------------+
| date_format(NULL, '%Y-%m-%d') |
+-------------------------------+
| NULL |
+-------------------------------+

---Returns error if the result string exceeds the function's maximum length limit.
mysql> select date_format('2022-01-12',repeat('a',129));
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.3)[INVALID_ARGUMENT]Operation date_format of invalid or oversized format is invalid

---output length over 102 size,throw error
mysql> select date_format('2022-11-13 10:12:12',repeat('%h',52));
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.3)[INVALID_ARGUMENT]Operation date_format of 142335809712816128,%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h is invalid