date_slice
Описание
Преобразует заданное время в начало или конец временного интервала на основе указанной временной детализации.
Эта функция поддерживается начиная с версии 1.5.0.
Синтаксис
DATE date_slice(DATE dt, INTERVAL N type[, boundary])
Параметры
dt: время для преобразования, DATE.INTERVAL N type: временная детализация, например,interval 5 day.N— длина временного интервала. Должно быть значением типа INT.type— единица измерения, которая может быть YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND. Еслиtypeустановлен как HOUR, MINUTE или SECOND для значения DATE, возвращается ошибка.
boundary: необязательный параметр. Используется для указания, возвращать ли начало (FLOOR) или конец (CEIL) временного интервала. Допустимые значения: FLOOR, CEIL. Если этот параметр не указан, по умолчанию используетсяFLOOR.
Возвращаемое значение
Возвращает значение типа DATE.
Примечания по использованию
Временной интервал начинается с 0001-01-01 00:00:00 н.э.
Примеры
Пример 1: Преобразование заданного времени в начало 5-летнего временного интервала без указания параметра boundary.
select date_slice('2022-04-26', interval 5 year);
+--------------------------------------------------+
| date_slice('2022-04-26', INTERVAL 5 year, floor) |
+--------------------------------------------------+
| 2021-01-01 |
+--------------------------------------------------+
Пример 2: Преобразование заданного времени в конец 5-дневного временного интервала.
select date_slice('0001-01-07', interval 5 day, CEIL);
+------------------------------------------------+
| date_slice('0001-01-07', INTERVAL 5 day, ceil) |
+------------------------------------------------+
| 0001-01-11 |
+------------------------------------------------+
Следующие примеры приведены на основе таблицы 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)
Пример 3: Преобразование заданного значения DATE в начало 5-секундного временного интервала.
select date_slice(id_date, interval 5 second, FLOOR)
from test_all_type_select
order by id_int;
ERROR 1064 (HY000): can't use date_slice for date with time(hour/minute/second)
Возвращается ошибка, поскольку система не может найти секундную часть значения DATE.
Пример 4: Преобразование заданного значения DATE в начало 5-дневного временного интервала.
select date_slice(id_date, interval 5 day, FLOOR)
from test_all_type_select
order by id_int;
+--------------------------------------------+
| date_slice(id_date, INTERVAL 5 day, floor) |
+--------------------------------------------+
| 2052-12-24 |
| 2168-08-03 |
| 1737-02-04 |
| 2245-09-29 |
| 1889-10-25 |
+--------------------------------------------+
5 rows in set (0.14 sec)
Пример 5: Преобразование заданного значения DATE в конец 5-дневного временного интервала.
select date_slice(id_date, interval 5 day, CEIL)
from test_all_type_select
order by id_int;
+-------------------------------------------+
| date_slice(id_date, INTERVAL 5 day, ceil) |
+-------------------------------------------+
| 2052-12-29 |
| 2168-08-08 |
| 1737-02-09 |
| 2245-10-04 |
| 1889-10-30 |
+-------------------------------------------+
5 rows in set (0.17 sec)