#timestamp #rounding #snowflake-cloud-data-platform
#временная метка #округление #snowflake-cloud-data-platform
Вопрос:
Я пытаюсь округлить CURRENT_TIMESTAMP до ближайшего получаса в Snowflake. В SQL приведенный ниже код округляет временную метку с ‘2021-01-01 10:35:00’ до ‘2021-01-01 10:30:00’ или ‘2021-01-01 17:20:00’ до ‘2021-01-01 17:00:00’, однако этот синтаксис не работает в Snowflake. Кто-нибудь знает, как это сделать в Snowflake?
ВЫБЕРИТЕ DATEADD(mi, DATEDIFF(mi, 0, GETDATE())/30*30, 0)
Ответ №1:
Для этого в Snowflake есть встроенная функция time_slice
.
select time_slice(current_timestamp::timestamp_ntz, 30, 'MINUTE');
Комментарии:
1. Спасибо, Грег! Это округляется идеально. Приветствия!!
Ответ №2:
Преобразовать в секунды из эпохи, разделить на 1800, округлить и вернуть к отметке времени:
select to_timestamp(
round(
date_part(epoch_second, current_timestamp())/1800
)*1800) nearest_half_hour
# 2021-02-27T01:30:00Z
Или любая произвольная временная метка:
select to_timestamp(
round(
date_part(epoch_second, to_timestamp('2020-10-10 17:51:01'))/1800
)*1800) nearest_half_hour
# 2020-10-10T18:00:00Z
Комментарии:
1. Это фактически округляет вверх или вниз до ближайшего получаса. Для округления в меньшую сторону вы можете изменить свое выражение на использование
floor
вместоround
. Функция time_slice всегда будет округлять в меньшую сторону, чтобы указать время с 1970-01-01.2. Исправьте @GregPavlik! Сначала я прочитал «round» (вместо «round down») и
floor()
сделаю это. Глядя на ваш ответ —time_slice
еще лучше (но менее стандартно в мире SQL)