如何在 HANA 中将时间戳舍入为小时

How to round a time stamp to hour in HANA

我在 HANA 中有一个时间戳列,我想将这些时间戳四舍五入为小时,这意味着

time
_____
2016-09-03 10:27:09

我希望它像

time
_____
2016-09-03 10:00:00

感谢任何帮助。

请检查以下 SQLScript

do begin

declare lv_ts TIMESTAMP := CURRENT_TIMESTAMP;

select 
    case when minute(:lv_ts) >=30 
    then
        ADD_SECONDS(
            :lv_ts, 
            (60 * 60 - (minute(:lv_ts) * 60 + to_int(second(:lv_ts))))
        )
    else 
        ADD_SECONDS(
            :lv_ts, 
            -1 * (minute(:lv_ts) * 60 + to_int(second(:lv_ts)))
        )
    end
from dummy;

end;

希望对你有帮助,

您只想截断分钟和秒吗?像这样从日期中减去分钟和秒怎么样:

SELECT ADD_SECONDS(CURRENT_TIMESTAMP,
    - MINUTE(CURRENT_TIMESTAMP) * 60 
    - SECOND(CURRENT_TIMESTAMP)) FROM DUMMY

如果您真的想 round 以便将 30 分钟或更多分钟四舍五入到下一个小时,您需要使用 CASE 减去 minutes/seconds 或将剩余分钟数添加到下一个小时:

SELECT ADD_SECONDS(CURRENT_TIMESTAMP, 
    CASE WHEN MINUTE(CURRENT_TIMESTAMP) < 30
    THEN -MINUTE(CURRENT_TIMESTAMP) * 60 - SECOND(CURRENT_TIMESTAMP)
    ELSE (60-MINUTE(CURRENT_TIMESTAMP)) * 60 - SECOND(CURRENT_TIMESTAMP)
    END
) FROM DUMMY

根据需要将 CURRENT_TIMESTAMP 替换为您的时间戳列。

使用series_round()。这是舍入时间戳的最快方法,尤其是在分组依据中使用它时。

select series_round('2016-09-03 10:27:09', 'interval 1 hour') from dummy

查看 documentation 以了解更多舍入选项。