Округление Current_Timestamp до ближайшего получаса в Snowflake / SQL

#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)