Функции для работы с датами и временем

Поділитись

MySQL имеет ряд встроенных функций для работы с датами и временем.

Получение даты и времени

  • Функции NOW()SYSDATE()CURRENT_TIMESTAMP() возвращают текущую локальную дату и время на основе системных часов в виде объекта datetime. Все три функции возвращают одинаковый результат123SELECT NOW();               -- 2018-05-25 21:34:55SELECT SYSDATE();           -- 2018-05-25 21:34:55SELECT CURRENT_TIMESTAMP(); -- 2018-05-25 21:32:55
  • Функции CURDATE и CURRENT_DATE возвращают текущую локальную дату в виде объекта date:12SELECT CURRENT_DATE();      -- 2018-05-25SELECT CURDATE();           -- 2018-05-25
  • Функции CURTIME и CURRENT_TIME возвращают текущее время в виде объекта time:12SELECT CURRENT_TIME();  -- 20:47:45SELECT CURTIME();       -- 20:47:45
  • UTC_DATE возвращает текущую локальную дату относительно GMT1SELECT UTC_DATE();      -- 2018-05-25
  • UTC_TIME возвращает текущее локальное время относительно GMT1SELECT UTC_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 извлекает из даты и времени какой-то определенный компонент. Ее формальный синтаксис:

1EXTRACT(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 Orders
WHERE DATEDIFF(CURDATE(), CreatedAt) = 5;
Функции для работы с датами и временем в MySQL

Поділитись