MySQL имеет ряд встроенных функций для работы с датами и временем.
Получение даты и времени
- Функции NOW(), SYSDATE(), CURRENT_TIMESTAMP() возвращают текущую локальную дату и время на основе системных часов в виде объекта datetime. Все три функции возвращают одинаковый результат123
SELECTNOW();-- 2018-05-25 21:34:55SELECTSYSDATE();-- 2018-05-25 21:34:55SELECTCURRENT_TIMESTAMP();-- 2018-05-25 21:32:55 - Функции CURDATE и CURRENT_DATE возвращают текущую локальную дату в виде объекта date:12
SELECTCURRENT_DATE();-- 2018-05-25SELECTCURDATE();-- 2018-05-25 - Функции CURTIME и CURRENT_TIME возвращают текущее время в виде объекта time:12
SELECTCURRENT_TIME();-- 20:47:45SELECTCURTIME();-- 20:47:45 - UTC_DATE возвращает текущую локальную дату относительно GMT1
SELECTUTC_DATE();-- 2018-05-25 - UTC_TIME возвращает текущее локальное время относительно GMT1
SELECTUTC_TIME();-- 17:47:45
Парсинг даты и времени
- DAYOFMONTH(date) возвращает день месяца в виде числового значения
- DAYOFWEEK(date) возвращает день недели в виде числового значения
- DAYOFYEAR(date) возвращает номер дня в году
- MONTH(date) возвращает месяц даты
- YEAR(date) возвращает год из даты
- QUARTER(date) возвращает номер квартала года
- WEEK(date [, first]) возвращает номер недели года. Необязательный параметр позволяет задать стартовый день недели. Если этот параметр равен 1, то первым днем считается понедельник, иначе воскресенье
- LAST_DAY(date) возвращает последний день месяца в виде даты
- DAYNAME(date) возвращает название дня недели
- MONTHNAME(date) возвращает название текущего месяца
- HOUR(time) возвращает час времени
- MINUTE(time) возвращает минуту времени
- SECOND(time) возвращает секунду времени
Примеры функций:
| Функция | Результат |
| DAYOFMONTH(‘2018-05-25’) | 25 |
| DAYOFWEEK(‘2018-05-25’) | 6 |
| DAYOFYEAR(‘2018-05-25’) | 145 |
| MONTH(‘2018-05-25’) | 5 |
| YEAR(‘2018-05-25’) | 2018 |
| QUARTER(‘2018-05-25’) | 2 |
| WEEK(‘2018-05-25’, 1) | 21 |
| LAST_DAY(‘2018-05-25’) | 2018-05-31 |
| DAYNAME(‘2018-05-25’) | Friday |
| MONTHNAME(‘2018-05-25’) | May |
| HOUR(’21:25:54′) | 21 |
| MINUTE(’21:25:54′) | 25 |
| SECOND(’21:25:54′) | 54 |
Функция EXTRACT
Функция EXTRACT извлекает из даты и времени какой-то определенный компонент. Ее формальный синтаксис:
| 1 | EXTRACT(unit FROM datetime) |
Значение datetime представляет исходную дату и (или) время, а значение unit указывает, какой компонент даты или времени будет извлекаться. Параметр unit может представлять одно из следующих значений:
SECOND(секунды)MINUTE(минуты)HOUR(час)DAY(день)MONTH(месяц)YEAR(год)MINUTE_SECOND(минуты и секунды)HOUR_MINUTE(часы и минуты)DAY_HOUR(день и часы)YEAR_MONTH(год и месяц)HOUR_SECOND(часы, минуты и секунды)DAY_MINUTE(день, часы и минуты)DAY_SECOND(день, чаы, минуты и секунды)
Примеры вызова функции:
| Вызов | Результат |
| EXTRACT( SECOND FROM ‘2018-05-25 21:25:54’) | 54 |
| EXTRACT( MINUTE FROM ‘2018-05-25 21:25:54’) | 25 |
| EXTRACT( HOUR FROM ‘2018-05-25 21:25:54’) | 21 |
| EXTRACT( DAY FROM ‘2018-05-25 21:25:54’) | 25 |
| EXTRACT( MONTH FROM ‘2018-05-25 21:25:54’) | 5 |
| EXTRACT( YEAR FROM ‘2018-05-25 21:25:54’) | 2018 |
| EXTRACT( MINUTE_SECOND FROM ‘2018-05-25 21:25:54’) | 2554 |
| EXTRACT( DAY_HOUR FROM ‘2018-05-25 21:25:54’) | 2521 |
| EXTRACT( YEAR_MONTH FROM ‘2018-05-25 21:25:54’) | 201805 |
| EXTRACT( HOUR_SECOND FROM ‘2018-05-25 21:25:54’) | 212554 |
| EXTRACT( DAY_MINUTE FROM ‘2018-05-25 21:25:54’) | 252125 |
| EXTRACT( DAY_SECOND FROM ‘2018-05-25 21:25:54’) | 25212554 |
Функции для манипуляции с датами
Ряд функций позволяют производить операции сложения и вычитания с датами и временем:
- DATE_ADD(date, INTERVAL expression unit) возвращает объект DATE или DATETIME, который является результатом сложения даты date с определенным временным интервалом. Интервал задается с помощью выражения
INTERVAL expression unit, гдеINTERVALпредоставляет ключевое слово,expression– количество добавляемых к дате единиц, аunit– тип единиц (часы, дни и т.д.) Параметрunitможет иметь те же значения, что и в функции EXTRACT, то есть DAY, HOUR и т.д. - DATE_SUB(date, INTERVAL expression unit) возвращает объект DATE или DATETIME, который является результатом вычитания из даты date определенного временного интервала
- DATEDIFF(date1, date2) возвращает разницу в днях между датами date1 и date2
- TO_DAYS(date) возвращает количество дней с 0-го года
- TIME_TO_SEC(time) возвращает количество секунд, прошедших с момента полуночи
Примеры применения:
| Вызов | Результат |
| DATE_ADD(‘2018-05-25’, INTERVAL 1 DAY) | 2018-05-26 |
| DATE_ADD(‘2018-05-25’, INTERVAL 3 MONTH) | 2018-08-25 |
| DATE_ADD(‘2018-05-25 21:31:27’, INTERVAL 4 HOUR) | 2018-05-26 01:31:27 |
| DATE_SUB(‘2018-05-25’, INTERVAL 4 DAY) | 2018-05-21 |
| DATEDIFF(‘2018-05-25’, ‘2018-05-27’) | -2 |
| DATEDIFF(‘2018-05-25’, ‘2018-05-21’) | 4 |
| DATEDIFF(‘2018-05-25’, ‘2018-03-21’) | 65 |
| TO_DAYS(‘2018-05-25’) | 737204 |
| TIME_TO_SEC(’10:00′) | 36000 |
Форматирование дат и времени
- DATE_FORMAT(date, format) возвращает объект DATE или DATETIME, отформатированный с помощью шаблона format
- TIME_FORMAT(date, format) возвращает объект TIME или DATETIME, отформатированный с помощью шаблона format
Обе функции в качестве второго параметра принимают строку форматирования или шаблон, который показывает, как оформатировать значение. Этот шаблон может принимать следующие значения:
%m: месяц в числовом формате 01..12%с: месяц в числовом формате 1..12%M: название месяца (January…December)%b: аббревиатура месяца (Jan…Dec)%d: день месяца в числовом формате 00..31%e: день месяца в числовом формате 0..31%D: номер дня месяца с суффиксом (1st, 2nd, 3rd…)%y: год в виде двух чисел%Y: год в виде четырех чисел%W: название дня недели (Sunday…Saturday)%a: аббревиатура дня недели (Sun…Sat)%H: час в формате 00..23%k: час в формате 0..23%h: час в формате 01..12%l: час в формате 1..12%i: минуты в формате 00..59%r: время в 12-ти часовом формате (hh:mm:ss AM или PM)%T: время в 24-ти часовом формате (hh:mm:ss)%S: секунды в формате 00..59%p: AM или PM
Примеры применения:
| Вызов | Результат |
| DATE_FORMAT(‘2018-05-25’, ‘%d/%m/%y’) | 25/05/18 |
| DATE_FORMAT(‘2018-05-25 21:25:54’, ‘%d %M %Y’) | 25 May 2018 |
| DATE_FORMAT(‘2018-05-25 21:25:54’, ‘%r’) | 09:25:54 PM |
| TIME_FORMAT(‘2018-05-25 21:25:54’, ‘%H:%i:%S’) | 21:25:24 |
| TIME_FORMAT(’21:25:54′, ‘%k:%i’) | 21:25 |
В качестве примера использования функций найдем заказы, которые были сделаны 5 дней назад:
| 1 2 | SELECT * FROM OrdersWHERE DATEDIFF(CURDATE(), CreatedAt) = 5; |
