Перейти к основному содержимому

time_slice

Описание

Преобразует заданное время в начало или конец временного интервала на основе указанной временной детализации.

Эта функция поддерживается начиная с версии 1.5.0.

Версия 2.5 поддерживает преобразование заданного времени в конец временного интервала.

Синтаксис

DATETIME time_slice(DATETIME dt, INTERVAL N type[, boundary])

Параметры

  • dt: время для преобразования, DATETIME.
  • INTERVAL N type: временная детализация, например, interval 5 second.
    • N — длина временного интервала. Должно быть значением типа INT.
    • type — единица измерения, которая может быть YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND (начиная с 3.1.7) и MICROSECOND (начиная с 3.1.7).
  • boundary: необязательный параметр. Используется для указания, возвращать ли начало (FLOOR) или конец (CEIL) временного интервала. Допустимые значения: FLOOR, CEIL. Если этот параметр не указан, по умолчанию используется FLOOR. Этот параметр поддерживается начиная с версии 1.5.0.

Возвращаемое значение

Возвращает значение типа DATETIME.

Примечания по использованию

Временной интервал начинается с 0001-01-01 00:00:00 нашей эры.

Примеры

Следующие примеры приведены на основе таблицы test_all_type_select.

select * from test_all_type_select order by id_int;
+------------+---------------------+--------+
| id_date | id_datetime | id_int |
+------------+---------------------+--------+
| 2052-12-26 | 1691-12-23 04:01:09 | 0 |
| 2168-08-05 | 2169-12-18 15:44:31 | 1 |
| 1737-02-06 | 1840-11-23 13:09:50 | 2 |
| 2245-10-01 | 1751-03-21 00:19:04 | 3 |
| 1889-10-27 | 1861-09-12 13:28:18 | 4 |
+------------+---------------------+--------+
5 rows in set (0.06 sec)

Пример 1: Преобразование заданного значения DATETIME в начало 5-секундного временного интервала без указания параметра boundary.

select time_slice(id_datetime, interval 5 second)
from test_all_type_select
order by id_int;
+---------------------------------------------------+
| time_slice(id_datetime, INTERVAL 5 second, floor) |
+---------------------------------------------------+
| 1691-12-23 04:01:05 |
| 2169-12-18 15:44:30 |
| 1840-11-23 13:09:50 |
| 1751-03-21 00:19:00 |
| 1861-09-12 13:28:15 |
+---------------------------------------------------+
5 rows in set (0.16 sec)

Пример 2: Преобразование заданного значения DATETIME в начало 5-дневного временного интервала с параметром boundary, установленным в FLOOR.

select time_slice(id_datetime, interval 5 day, FLOOR)
from test_all_type_select
order by id_int;
+------------------------------------------------+
| time_slice(id_datetime, INTERVAL 5 day, floor) |
+------------------------------------------------+
| 1691-12-22 00:00:00 |
| 2169-12-16 00:00:00 |
| 1840-11-21 00:00:00 |
| 1751-03-18 00:00:00 |
| 1861-09-12 00:00:00 |
+------------------------------------------------+
5 rows in set (0.15 sec)

Пример 3: Преобразование заданного значения DATETIME в конец 5-дневного временного интервала.

select time_slice(id_datetime, interval 5 day, CEIL)
from test_all_type_select
order by id_int;
+-----------------------------------------------+
| time_slice(id_datetime, INTERVAL 5 day, ceil) |
+-----------------------------------------------+
| 1691-12-27 00:00:00 |
| 2169-12-21 00:00:00 |
| 1840-11-26 00:00:00 |
| 1751-03-23 00:00:00 |
| 1861-09-17 00:00:00 |
+-----------------------------------------------+

Пример 4: Преобразование заданного значения DATETIME в конец 1-миллисекундного временного интервала.

select id_datetime, time_slice(id_datetime, interval 1 millisecond, CEIL)
from test_all_type_select
order by id_int;
+---------------------+-------------------------------------------------------+
| id_datetime | time_slice(id_datetime, INTERVAL 1 millisecond, ceil) |
+---------------------+-------------------------------------------------------+
| 1691-12-23 04:01:09 | 1691-12-23 04:01:09.001000 |
| 2169-12-18 15:44:31 | 2169-12-18 15:44:31.001000 |
| 1840-11-23 13:09:50 | 1840-11-23 13:09:50.001000 |
| 1751-03-21 00:19:04 | 1751-03-21 00:19:04.001000 |
| 1861-09-12 13:28:18 | 1861-09-12 13:28:18.001000 |
+---------------------+-------------------------------------------------------+

Пример 5: Преобразование заданного значения DATETIME в конец 1-микросекундного временного интервала.

select id_datetime, time_slice(id_datetime, interval 1 microsecond, CEIL)
from test_all_type_select
order by id_int;
+---------------------+-------------------------------------------------------+
| id_datetime | time_slice(id_datetime, INTERVAL 1 microsecond, ceil) |
+---------------------+-------------------------------------------------------+
| 1691-12-23 04:01:09 | 1691-12-23 04:01:09.000001 |
| 2169-12-18 15:44:31 | 2169-12-18 15:44:31.000001 |
| 1840-11-23 13:09:50 | 1840-11-23 13:09:50.000001 |
| 1751-03-21 00:19:04 | 1751-03-21 00:19:04.000001 |
| 1861-09-12 13:28:18 | 1861-09-12 13:28:18.000001 |
+---------------------+-------------------------------------------------------+