
Функции даты и времени MySQL
Группа функция даты и времени предназначена для форматирования и преобразования календарных значений. В таблице представлен список календарных функций, доступных в СУБД MySQL.
| Функции | Описание |
|---|---|
| ADDDATE(date, INTERVAL expr type), DATE_ADD(date, INTERVAL expr type) | Возвращает время date, к которому прибавлен временной интервал, определяемый вторым параметром |
| ADDTIME(expr1, expr2) | Возвращает результат сложения двух календарных значений expr1 и expr2 |
| CONVERT_TZ(dt, from_tz, to_tz) | Переводит DATETIME-значение dt из часового пояса from_tz в to_tz. Если аргументы ошибочны возвращает NULL |
| CURDATE(), CURRENT_DATE, CURRENT_DATE() |
Возвращает текущую дату в формате 'YYYY-MM-DD' или YYYYDDMM в зависимости от того, вызывается функция в текстовом или числовом контексте |
| CURTIME(), CURRENT_TIME, CURRENT_TIME() |
Возвращает текущее время суток в виде 'hh-mm-ss' или 'hhmmss в зависимости от того, вызывается функция в текстовом или числовом контексте |
| DATE(datetime) | Извлекает из значения даты и времени суток в формате DATETIME(например '2009-03-18 00:26:23') дату,отсекая часы, минуты и секунды — '2009-03-18' |
| DATEDIFF(begin, end) | Вычисляют разницу в днях между датами begin и end. Аргументы функции могут иметь тип DATE и DATETIME, однако при вычислении разницы используется только DATE-часть |
| DATE_FORMAT(date, format) | Форматирует время date в соответствии со строкой format |
| DAY(date), DAYOFMONTH(date) |
Принимает в качестве аргумента дату date и возвращает порядковый номер дня в месяце (от 1 до 31) |
| DAYNAME(date) | Принимает в качестве аргумента дату date и возвращает день недели в виде полного английского названия |
| DAYOFWEEK(date) | Принимает в качестве аргумента дату date и возвращает порядковый номер дня недели. Следует помнить, что в западных странах неделя начинается с воскресенья, для которого функция возвращает 1, для последнего дня недели, субботы, возвращается 7 |
| DAYOFYEAR(date) | Принимает в качестве аргумента дату date и возвращает порядковый номер дня в году (от 1 до 366) |
| EXTRACT(type FROM datetime) | Принимает дату и время суток datetime и возвращает часть, определяемую параметром type |
| FROM_DAYS(N) | Принимает количество дней N, прошедших с нулевого года, и возвращает дату в формате 'YYYY-MM-DD' |
| FROM_UNIXTIME(unix_timestamp), FROM(unix_timestamp, format) | Принимает количество секунд, прошедших с полуночи 1 января 1970 года, и возвращает дату и время суток в виде строки 'YYYY-MM-DD hh-mm-ss' или в виде числа YYYYMMDDhhmmss в зависимости от того, вызвана функция в строковом или числовом контексте |
| GET_FORMAT(date|time|datetime, 'EUR'|'USA'|'JIS'|'ISO'|'INTERVAL') | Возвращает строку форматрования, соответствующую одному из пяти стандартов времени |
| HOUR(datetime) | Возвращает значение часа (от 0 до 23) для времени datetime |
| LAST_DAY(datetime) | Принимает в качестве параметра значение даты datetime в кратком 'YYYY-MM-DD' или расширенном формате 'YYYY-MM-DD hh:mm:ss' и возвращает дату в кратком формате 'YYYY-MM-DD', день в котором выставлен на последний день текущего месяца |
| MAKEDATE(year, dayofyear) | Принимает в качестве параметров год year, номер дня в году dayofyear и возвращает дату в формате 'YYYY-MM-DD' |
| MAKETIME(hour, minute, second) | Принимает три параметра: часы hour, минуты minute и секунды second. В качестве результата функция возвращает время суток в формате 'hh:mm:ss' |
| MICROSECOND(datetime) | Извлекает из временного значения datetime микросекунды |
| MINUTE(datetime) | Возвращает значение минут (от 0 до 59) для времени суток datetime |
| MONTH(datetime) | Возвращает числовое значение месяца года (от1 до 12) для даты datetime |
| MONTHNAME(datetime) | Возвращает строку с названием месяца для даты datetime |
| NOW(), CURRENT_TIME, CURRENT_TIME(), CURRENT_TIMESTAMP, CURRENT_TIMESTAMP(), LOCALTIME(), LOCALTIME, LOCALTIMESTAMP(), LOCALTIMESTAMP, SYSDATE() |
Возвращает текущие дату и время в виде строки в формате 'YYYY-MM-DD hh:mm:ss' или в виде числа YYYYMMDDhhmmss, в зависимости от того, вызывается функция в строковом или числовом контексте |
| PERIOD_ADD(period, N) | Добавляет N месяцев к значению даты period. Аргумент period длжен быть представлен в чмсловом формате YYYYMM или YYMM. Передача в качестве аргумента даты в любом другом формате приводит к непредсказуемому результату. |
| PERIOD_DIFF(period1, period2) | Вычисляет разницу в месяцах между двумя датами period1 и period2, которые представлены в числовом формате YYYYMM или YYMM |
| QUARTER(datetime) | Возвращает значение квартала года (от 1 до 4) для даты datetime, которая передается в формате 'YYYY-MM-DD' или 'YYYY-MM-DD hh:mm:ss' |
| SECOND(time) | Возвращает количество секунд для времени суток time, которая задается либо в виде строки 'hh:mm:ss', либо числа hhmmss |
| SEC_TO_TIME(seconds) | Принимает количество секунд seconds, прошедших от начала суток, и возвращает время в формате 'hh:mm:ss' или hhmmss, в зависимости от того, вызывается функция в строковом или числовом контексте |
| STR_TO_DATE(str, format) | Принимает дату и время суток в виде строки str, соответствующей формату format, и возвращает время в формате MySQL 'YYYY-MM-DD hh:mm:ss' |
| SUBDATE(date, INTERVAL expr interval), DATE_SUB(date, INTERVAL expr interval) | Возвращает дату date, из которой вычисляется временной интервал, определяемый вторым праметром |
| SUBTIME(datetime, time) | Вычитает из временной величины datetime время суток time и возвращает результат |
| TIME(datetime) | Извлекает время суток 'hh:mm:ss' из даты и времени datetime |
| TIMEDIFF(expr1, expr2) |
Возвращает разницу между временными значениями, заданными параметрами expr1 и expr2 |
| TIMESTAMP(expr) | Принимает в качестве аргумента дату и время суток в полном или кратком форматах и возвращает полный вариант в формате 'YYYY-MM-DD hh:mm:ss' |
| TIMESTAMPADD(interval, int_expr, datetime_expr) | Прибавляет к дате и времени суток datetime_expr в полном или кратком формате временной интервал int_expr, единицы измерения которого задаются параметром interval |
| TIMESTAMPDIFF(interval, datetime_expr1, datetime_expr2) | Возвращают разницу между двумя датами datetime_expr1 или datetime_expr2, заданных в кратком 'YYYY-MM-DD' или полном 'YYYY-MM-DD hh:mm:ss' форматах. Единицы измерения, в которых функция возвращает результат, задаются параметром interval |
| TIME_FORMAT(time, format) | Форматирует время time, которое задается в виде 'hh:mm:ss' согласно строке форматирования format |
| TIME_TO_SEC(time) | Принимает в качестве аргумента время суток time в формате 'hh:mm:ss' и возвращает количество секунд, прошедших с начала суток |
| TO_DAYS(date) |
Принимает дату date в полном 'YYYY-MM-DD hh:mm:ss' или кратком 'YYYY-MM-DD' формате и возвращает количество дней, прошедших с нулевого года |
| UNIX_TIMESTAMP(), UNIX_TIMESTAMP(datetime) | Вариант без параметра datetime возвращает количество секунд, прошедших с полуночи 1 января 1970 года. Кроме этого, функция может принимать необязательный параметр datetime, определяющий дату в кратком 'YYYY-MM-DD' или полном 'YYYY-MM-DD hh:mm:ss' форматах, возвращая в этом случае разницу в секундах между 1 января 1970 года и указанной datetime датой |
| UTC_DATE() | Возвращает текущую дату в виде строки 'YYYY-MM-DD' или числа YYYYMMDD в зависимости от того, в каком контексте вызывается функция. В отличии от функции NOW() или CURDATE(), возвращающих локальную дату, в UTC_DATE() время исчисляемое по Гринвичу |
| UTC_TIME() | Возвращает текущее время суток в виде строки 'hh:mm:ss' или числа hhmmss в зависимости от того, в каком контексте вызывается функция NOW() или CURTIME(), возвращающих локальную дату, в UTC_DATE() время исчисляется по Гринвичу |
| UTC_TIMESTAMP() | Возвращает дату и время суток в виде строки 'YYYY-MM-DD hh:mm:ss' или в виде числа YYYYMMDDhhmmss в зависимости от того, в каком контексте вызывается функция. В отличии от функции NOW(), возвращающей локальную дату, в UTC_DATE() время исчисляется по Гринвичу |
| WEEK(date) | Возвращает номер недели (от 0 до 53) в году для даты date |
| WEEKDAY(date) | Принимает дату date в полном 'YYYY-MM-DD hh:mm:ss' или кратком 'YYYY-MM-DD' форматах и возвращает номер дня недели (0 для понедельника, 1 для вторника, . . ., 6 для воскресенья) |
| WEEKOFYEAR(datetime) | Возвращает порядковый номер недели в году (от 1 до 53) для даты datetime |
| YEAR(datetime) | Возвращает год (от 1000 до 9999) для даты datetime |
| YEARWEEK(date) | Возвращает число в формате YYYYWW, представляющее год и номер недели (от 0 до 53) в году, соответствующие дате date. Предполагается, что неделя начинается с воскресенья(как это принято на Западе) |
Форматирование календарных значений
Функция DATE_FORMAT(date, format) форматирует время date в соответствии со строкой format. В строке формат могут использоваться определители, представленные в таблице.
| Определитель | Описание |
|---|---|
| %a | Cокращенное наименование дня недели (Sun, . . . , Sat) |
| %b | Cокращенное наименование месяца (Jan, . . . , Dec) |
| %c | Месяц в числовой форме (1, . . . , 12) |
| %D | День месяца с английским суффиксом (1st, 2nd, 3rd и т.д.) |
| %d | День месяца в числовой форме с ведущим нулем(01, . . ., 31) |
| %e | День месяца в числовой форме (1, . . ., 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 | Название месяца (January, . . ., December) |
| %m | Месяц в числовом форме с ведущим нулем (01, . . ., 12) |
| %p | AM или PM(для 12-часового формата) |
| %r | Время, 12-часовой формат (hh:mm:ss AM или hh:mm:ss PM) |
| %S | Секунды (00, . . ., 59) |
| %s | Секунды (00, . . ., 59) |
| %T | Время, 24-часовой формат (hh:mm:ss) |
| %U | Неделя (00, . . ., 52), где воскресенье считается первым днем недели |
| %u | Неделя (00, . . ., 52), где понедельник считается первым днем недели |
| %V | Неделя (01, . . ., 53), где воскресенье считается первым днем недели. Используется с %Х |
| %v | Неделя (01, . . ., 53), где понедельник считается первым днем недели. Используется с %Х |
| %W | Название дня недели (Sunday, . . . , Satuday) |
| %w | День недели (0, . . ., 6), где 0 — воскресенье, . . ., 6 — суббота |
| %X | Год в который началась неделя, где воскресенье считается первым днем недели, 4 разряда, используется с %V |
| %x | Год в который началась неделя, где воскресенье считается первым днем недели, 4 разряда, используется с %v |
| %Y | Год, 4 разряда (YYYY) |
| %y | Год, 2 разряда (YY) |
| %% | Литерал % |
Все другие символы, которые не указаны в таблице, выводятся без изменений.
Рассмотрим наиболее часто встречающуюся задачу преобразования календарного значения из MySQL-формата '2009-03-20 11:53:25' в привычный формат '20.03.2009 11:53'.
Преобразование даты при помощи функции DATE_FORMAT()


Вычисление возраста человека
Создадим таблицу tb4, содержащую сведения о сотрудниках и состоящую из трех столбцов:
id— первичный ключ таблицы;fio— фамилия, имя, отчество сотрудника;putdate— дата рождения.
Создание таблицы tb4

Вставка данных в таблицу tb4

Необходимо вычислить возраст сотрудников на текущую дату. Один из вариантов состоит в преобразовании даты рождения и текущей даты в дни при помощи функции TO_DAYS() делению на число 365.25: в году 365 дней; дробное число 0,25 призвано компенсировать високосные года, которые случаются раз в четыре года.
Вычисление возраста сотрудников

Для того, чтобы избавиться от дробной части, можно воспользоваться функцией FLOOR().
Отбрасывание дробной части

Преобразование даты в UNIXSTAMP- формат
Пожалуй, самым распространенным является формат хранения времени UNIXSTAMP. Его популярность обусловлена удобством операций сложения и вычитания временных интервалов. UNIXSTAMP-формат — это количество секунд, прошедших с полуночи 1 января 1970 года. Для преобразования MySQL-даты в UNIXSTAMP-формат используется функция UNIX_TIMESTAMP([datetime]). Функция может принимать необязательный параметр datetime, определяющий дату в кратком 'YYYY-MM-DD' или полном 'YYYY-MM-DD hh:mm:ss' форматах, возвращая в этом случае разницу в секундах между 1 января 1970 года и указанной в datetime датой.
Использование функции UNIX_TIMESTAMP()

Функция FROM_UNIXTIME(unix_timestamp) решает обратную задачу: принимает число секунд, прошедших с полуночи 1 января 1970 года, и возвращает дату и время суток в виде строки 'YYYY-MM-DD hh:mm:ss' или в виде числа YYYYMMDDhhmmss в зависимости от того, вызвана функция в строковом или числовом контексте.
Использование функции FROM_UNIXTIME()

Как видно из примера, передача функции значения 0 в качестве аргумента приводит к выводу вместо полуночи 3 часа ночи. Это связано с тем, что время на машине, где расположен сервер MySQL, настроено для третьей временной зоны.
Функция FROM_UNIXTIME(unix_timestamp, format) может принимать втрой параметр format, который представляет собой строку, содержащую определители. Использование определителей позволяет отформатировать строку.
Форматирование результатов функции FROM_UNIXTIME()

Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться