四舍五入到最近的十分钟 - Snowflake/SQL
Round off to the nearest ten minutes - Snowflake/SQL
在 Snowflake/SQL 中将时间戳四舍五入到最接近十分钟的最佳方法是什么?谢谢
转换为自纪元以来的秒数,ROUND()
,并转换回 TIMESTAMP
:
SELECT TO_TIMESTAMP(ROUND(EXTRACT(EPOCH_SECOND FROM CURRENT_TIMESTAMP)/(10*60))*(10*60));
=> 2019-12-04 07:10:00.000
(上面的查询是 运行 在 07:13 UTC)
请注意,您可以使用 TO_TIMESTAMP_[L]TZ()
转换回本地时区,但通常无法正确调整 TIMESTAMP_TZ
即 不是您当地的时区,因为调整意味着夏令时的变化。然后你必须知道 TIMESTAMP_TZ
起源的时区的名称,这样你就可以 CONVERT_TIMEZONE()
调整后的值到正确的偏移量。
但是当我的会话时区是 Europe/Oslo
:
时这有效
SELECT TS, TO_TIMESTAMP_TZ(ROUND(EXTRACT(EPOCH_SECOND FROM TS)/(10*60))*(10*60)) RTS
FROM (SELECT TIMESTAMP_TZ_FROM_PARTS(2020, 3, 29, 1, 59, 59 , 0, 'Europe/Oslo') TS);
=> 2020-03-29 01:59:59.000 +0100 2020-03-29 03:00:00.000 +0200
在 Snowflake/SQL 中将时间戳四舍五入到最接近十分钟的最佳方法是什么?谢谢
转换为自纪元以来的秒数,ROUND()
,并转换回 TIMESTAMP
:
SELECT TO_TIMESTAMP(ROUND(EXTRACT(EPOCH_SECOND FROM CURRENT_TIMESTAMP)/(10*60))*(10*60));
=> 2019-12-04 07:10:00.000
(上面的查询是 运行 在 07:13 UTC)
请注意,您可以使用 TO_TIMESTAMP_[L]TZ()
转换回本地时区,但通常无法正确调整 TIMESTAMP_TZ
即 不是您当地的时区,因为调整意味着夏令时的变化。然后你必须知道 TIMESTAMP_TZ
起源的时区的名称,这样你就可以 CONVERT_TIMEZONE()
调整后的值到正确的偏移量。
但是当我的会话时区是 Europe/Oslo
:
SELECT TS, TO_TIMESTAMP_TZ(ROUND(EXTRACT(EPOCH_SECOND FROM TS)/(10*60))*(10*60)) RTS
FROM (SELECT TIMESTAMP_TZ_FROM_PARTS(2020, 3, 29, 1, 59, 59 , 0, 'Europe/Oslo') TS);
=> 2020-03-29 01:59:59.000 +0100 2020-03-29 03:00:00.000 +0200