Функции даты и времени

Обратите внимание, что CURTIME(), UTC_TIME(), UTC_TIMESTAMP(), и TIMEDIFF() могут быть преобразованы в числовые типы с помощью произвольных функций преобразования, таких как BIGINT(), DOUBLE() и т.д.

NOW()

Возвращает текущую метку времени в виде INTEGER.

‹›
  • SQL
SQL
📋
select NOW();
‹›
Response
+------------+
| NOW()      |
+------------+
| 1615788407 |
+------------+

CURTIME()

Возвращает текущее время в локальном часовом поясе в формате hh:ii:ss.

‹›
  • SQL
SQL
📋
select CURTIME();
‹›
Response
+-----------+
| CURTIME() |
+-----------+
| 07:06:30  |
+-----------+

CURDATE()

Возвращает текущую дату в локальном часовом поясе в формате YYYY-MM-DD.

‹›
  • SQL
SQL
📋
select curdate();
‹›
Response
+------------+
| curdate()  |
+------------+
| 2023-08-02 |
+------------+

UTC_TIME()

Возвращает текущее время в часовом поясе UTC в формате hh:ii:ss.

‹›
  • SQL
SQL
📋
select UTC_TIME();
‹›
Response
+------------+
| UTC_TIME() |
+------------+
| 06:06:18   |
+------------+

UTC_TIMESTAMP()

Возвращает текущее время в часовом поясе UTC в формате YYYY-MM-DD hh:ii:ss.

‹›
  • SQL
SQL
📋
select UTC_TIMESTAMP();
‹›
Response
+---------------------+
| UTC_TIMESTAMP()     |
+---------------------+
| 2021-03-15 06:06:03 |
+---------------------+

SECOND()

Возвращает целочисленное значение секунд (в диапазоне 0..59) из аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select second(now());
‹›
Response
+---------------+
| second(now()) |
+---------------+
| 52            |
+---------------+

MINUTE()

Возвращает целочисленное значение минут (в диапазоне 0..59) из аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select minute(now());
‹›
Response
+---------------+
| minute(now()) |
+---------------+
| 5             |
+---------------+

HOUR()

Возвращает целочисленное значение часов (в диапазоне 0..23) из аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select hour(now());
‹›
Response
+-------------+
| hour(now()) |
+-------------+
| 7           |
+-------------+

DAY()

Возвращает целочисленное значение дня месяца (в диапазоне 1..31) из аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select day(now());
‹›
Response
+------------+
| day(now()) |
+------------+
| 15         |
+------------+

MONTH()

Возвращает целочисленное значение месяца (в диапазоне 1..12) из аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select month(now());
‹›
Response
+--------------+
| month(now()) |
+--------------+
| 3            |
+--------------+

QUARTER()

Возвращает целочисленное значение квартала года (в диапазоне 1..4) из аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select quarter(now());
‹›
Response
+----------------+
| quarter(now()) |
+----------------+
| 2              |
+----------------+

YEAR()

Возвращает целочисленное значение года (в диапазоне 1969..2038) из аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select year(now());
‹›
Response
+-------------+
| year(now()) |
+-------------+
| 2024        |
+-------------+

DAYNAME()

Возвращает название дня недели для заданного аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select dayname(now());
‹›
Response
+----------------+
| dayname(now()) |
+----------------+
| Wednesday      |
+----------------+

MONTHNAME()

Возвращает название месяца для заданного аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select monthname(now());
‹›
Response
+------------------+
| monthname(now()) |
+------------------+
| August           |
+------------------+

DAYOFWEEK()

Возвращает целочисленный индекс дня недели (в диапазоне 1..7) для заданного аргумента метки времени, согласно текущему часовому поясу. Обратите внимание, что неделя начинается с воскресенья.

‹›
  • SQL
SQL
📋
select dayofweek(now());
‹›
Response
+------------------+
| dayofweek(now()) |
+------------------+
| 5                |
+------------------+

DAYOFYEAR()

Возвращает целочисленное значение дня года (в диапазоне 1..366) для заданного аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select dayofyear(now());
‹›
Response
+------------------+
| dayofyear(now()) |
+------------------+
|              214 |
+------------------+

YEARWEEK()

Возвращает целочисленное значение года и код дня первого дня текущей недели (в диапазоне 1969001..2038366) для заданного аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select yearweek(now());
‹›
Response
+-----------------+
| yearweek(now()) |
+-----------------+
|         2023211 |
+-----------------+

YEARMONTH()

Возвращает целочисленное значение года и месяца (в диапазоне 196912..203801) из аргумента метки времени, согласно текущему часовому поясу.

‹›
  • SQL
SQL
📋
select yearmonth(now());
‹›
Response
+------------------+
| yearmonth(now()) |
+------------------+
| 202103           |
+------------------+

YEARMONTHDAY()

Возвращает целочисленное значение года, месяца и дня (в диапазоне от 19691231 до 20380119) на основе текущего часового пояса.

‹›
  • SQL
SQL
📋
select yearmonthday(now());
‹›
Response
+---------------------+
| yearmonthday(now()) |
+---------------------+
| 20210315            |
+---------------------+

TIMEDIFF()

Вычисляет разницу между двумя метками времени в формате hh:ii:ss.

‹›
  • SQL
SQL
📋
select timediff(1615787586, 1613787583);
‹›
Response
+----------------------------------+
| timediff(1615787586, 1613787583) |
+----------------------------------+
| 555:33:23                        |
+----------------------------------+

DATEDIFF()

Вычисляет количество дней между двумя заданными метками времени.

‹›
  • SQL
SQL
📋
select datediff(1615787586, 1613787583);
‹›
Response
+----------------------------------+
| datediff(1615787586, 1613787583) |
+----------------------------------+
|                               23 |
+----------------------------------+

DATE()

Форматирует часть даты из аргумента метки времени в строку в формате YYYY-MM-DD.

‹›
  • SQL
SQL
📋
select date(now());
‹›
Response
+-------------+
| date(now()) |
+-------------+
| 2023-08-02  |
+-------------+

TIME()

Форматирует часть времени из аргумента метки времени в строку в формате HH:MM:SS.

‹›
  • SQL
SQL
📋
select time(now());
‹›
Response
+-------------+
| time(now()) |
+-------------+
| 15:21:27    |
+-------------+

DATE_FORMAT()

Возвращает отформатированную строку на основе предоставленных аргументов даты и формата. Аргумент формата использует те же спецификаторы, что и функция strftime. Для удобства, вот некоторые распространённые спецификаторы формата:

  • %Y - Год из четырёх цифр
  • %m - Двухзначный месяц (01-12)
  • %d - Двухзначный день месяца (01-31)
  • %H - Двухзначный час (00-23)
  • %M - Двухзначная минута (00-59)
  • %S - Двухзначная секунда (00-59)
  • %T - Время в 24-часовом формате (%H:%M:%S)

Обратите внимание, что это не полный список спецификаторов. Пожалуйста, обратитесь к документации по strftime() для вашей операционной системы, чтобы получить полный список.

‹›
  • SQL
SQL
📋
SELECT DATE_FORMAT(NOW(), 'year %Y and time %T');
‹›
Response
+------------------------------------------+
| DATE_FORMAT(NOW(), 'year %Y and time %T') |
+------------------------------------------+
| year 2023 and time 11:54:52              |
+------------------------------------------+

Этот пример форматирует текущие дату и время, отображая четырехзначный год и время в 24-часовом формате.

DATE_HISTOGRAM()

DATE_HISTOGRAM(expr, {calendar_interval='unit_name'}) принимает размер корзины в виде названия единицы и возвращает номер корзины для значения. Значения округляются до ближайшей корзины. Ключевая функция:

key_of_the_bucket = interval * floor ( value / interval )

Интервалы могут быть указаны с помощью названия единицы, например week, или как одна единица, например 1M. Однако множественные единицы, такие как 2d, не поддерживаются с calendar_interval, но разрешены с fixed_interval.

Допустимые интервалы для calendar_interval:

  • minute, 1m
  • hour, 1h
  • day, 1d
  • week, 1w (неделя — это интервал между начальным днем недели, часом, минутой, секундой и следующей неделей, но в тот же день и время недели)
  • month, 1M
  • year, 1y (год — это интервал между начальным днем месяца, временем и следующим годом, но в тот же день месяца и время)

Допустимые интервалы для fixed_interval:

  • minute, 2m
  • hour, 3h
  • day, 5d

Используется в агрегациях, FACET и группировках.

Пример:

SELECT COUNT(*),
DATE_HISTOGRAM(tm, {calendar_interval='month'}) AS months
FROM facets
GROUP BY months ORDER BY months ASC;

DATE_RANGE()

DATE_RANGE(expr, {range_from='date_math', range_to='date_math'}) принимает набор диапазонов и возвращает номер корзины для значения. Выражение включает значение range_from и исключает значение range_to для каждого диапазона. Диапазон может быть открытым — иметь только значение range_from или только range_to. Отличие от функции RANGE() в том, что значения range_from и range_to могут быть выражены в выражениях Date math.

Используется в агрегациях, FACET и группировках.

Пример:

SELECT COUNT(*),
DATE_RANGE(tm, {range_to='2017||+2M/M'},{range_from='2017||+2M/M',range_to='2017||+5M/M'},{range_from='2017||+5M/M'}) AS points
FROM idx_dates
GROUP BY points ORDER BY points ASC;
Date math

Date math позволяет работать с датами и временем непосредственно в ваших поисках. Это особенно полезно для обработки данных, которые меняются со временем. С помощью date math вы можете легко находить записи за определенный период, анализировать тенденции данных или управлять временем удаления информации. Это упрощает работу с датами, позволяя добавлять или вычитать время от заданной даты, округлять даты до ближайшей единицы времени и многое другое, всё это в рамках ваших поисковых запросов.

Для использования date math вы начинаете с базовой даты, которая может быть:

  • now для текущей даты и времени,
  • или конкретной строкой даты, заканчивающейся на ||.

Затем вы можете модифицировать эту дату операциями, такими как:

  • +1y чтобы добавить один год,
  • -1h чтобы вычесть один час,
  • /m чтобы округлить до ближайшего месяца.

Вы можете использовать следующие единицы в операциях:

  • s для секунд,
  • m для минут,
  • h (или H) для часов,
  • d для дней,
  • w для недель,
  • M для месяцев,
  • y для лет.

Вот несколько примеров использования date math:

  • now+4h означает четыре часа от текущего момента.
  • now-2d/d — время два дня назад, округленное до ближайшего дня.
  • 2010-04-20||+2M/d — 20 июня 2010 года, округленное до ближайшего дня.
Last modified: August 28, 2025