← К оглавлению занятия

🔖 Справочник: дата и время

⚡ Минимум для запоминания

  • DATE, TIME, DATETIME, TIMESTAMP, YEAR — типы данных.
  • NOW(), CURDATE(), CURTIME() — текущий момент.
  • DATE_FORMAT, YEAR, MONTH, DAY, EXTRACT — части даты.
  • DATE_ADD, DATE_SUB, DATEDIFF — арифметика.

Типы данных

ТипФорматДиапазон
DATEYYYY-MM-DD1000-01-01 … 9999-12-31
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 … 9999-12-31 23:59:59
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 UTC … 2038-01-19 03:14:07 UTC
TIMEHH:MM:SS-838:59:59 … 838:59:59
YEARYYYY1901 … 2155

Функции MySQL

ФункцияОписаниеПример
NOW()Текущие дата и времяSELECT NOW();
CURDATE()Текущая датаSELECT CURDATE();
CURTIME()Текущее времяSELECT CURTIME();
DATE_FORMAT(date, format)Форматирование датыSELECT DATE_FORMAT(NOW(), '%d-%m-%Y');
DATEDIFF(date1, date2)Разница в дняхSELECT DATEDIFF('2024-08-30', '2024-08-25');
DATE_ADD(date, INTERVAL n unit)Прибавить интервалSELECT DATE_ADD(NOW(), INTERVAL 7 DAY);
DATE_SUB(date, INTERVAL n unit)Вычесть интервалSELECT DATE_SUB(NOW(), INTERVAL 90 DAY);
EXTRACT(unit FROM date)Извлечь часть датыSELECT EXTRACT(YEAR FROM NOW());
YEAR(date)ГодSELECT YEAR(order_date);
MONTH(date)МесяцSELECT MONTH(order_date);
DAY(date)ДеньSELECT DAY(order_date);
TIME_TO_SEC(time)Время в секундыSELECT TIME_TO_SEC('02:30:00');
SEC_TO_TIME(seconds)Секунды во времяSELECT SEC_TO_TIME(9000);

Частые спецификаторы DATE_FORMAT

СпецификаторЗначениеПример
%YГод четырьмя цифрами2024
%yГод двумя цифрами24
%mМесяц числом (01–12)08
%cМесяц числом (1–12)8
%dДень месяца (01–31)30
%eДень месяца (1–31)30
%HЧасы 24-часового формата (00–23)14
%iМинуты (00–59)05
%sСекунды (00–59)09
%WДень недели полностьюFriday
%aДень недели короткоFri

MySQL ↔ PostgreSQL

ОперацияMySQLPostgreSQL
Текущая дата/времяNOW()NOW(), CURRENT_TIMESTAMP
Текущая датаCURDATE()CURRENT_DATE
Текущее времяCURTIME()CURRENT_TIME
Разница в дняхDATEDIFF(d1, d2)DATE_PART('day', d1 - d2)
Добавить интервалDATE_ADD(d, INTERVAL 7 DAY)d + INTERVAL '7 days'
Вычесть интервалDATE_SUB(d, INTERVAL 7 DAY)d - INTERVAL '7 days'
Извлечь годYEAR(d)EXTRACT(YEAR FROM d)
Время в секундыTIME_TO_SEC(t)EXTRACT(EPOCH FROM t)

Полный справочник

→ Справочник SQL