将Oracle SYSDATE舍入到最接近的小时

时间:2017-04-03 20:48:06

标签: sql oracle

假设当前的SYSDATE是03-APR-17 03.35.49,我的查询需要得到以下值:

一个。 SYSDATE四舍五入到最接近的小时(在本例中为03.00.00)

湾减1小时= 02.00.00

我试过并发现使用“-1/24”会减去一小时的日期时间。有点新的Oracle在第一部分如此挣扎。 不确定我是否应该使用ROUND或FLOOR或任何其他功能。 任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:7)

select sysdate,
       trunc(sysdate, 'hh') as truncated,
       round(sysdate, 'hh') as rounded
from   dual;

SYSDATE              TRUNCATED            ROUNDED
-------------------  -------------------  -------------------
04/03/2017 15:54:22  04/03/2017 15:00:00  04/03/2017 16:00:00

答案 1 :(得分:1)

这是截断值:

select trunc(sysdate, 'hh')
from dual;

围绕它:

select trunc(sysdate + interval '30' minute, 'hh')
from dual;

或者:

select round(sysdate, 'hh')
from dual;

我忘了round()也可以采用格式参数。

答案 2 :(得分:0)

  

我的查询需要获取以下值之间的值:

     

一个。 SYSDATE四舍五入到最接近的小时(在本例中为03.00.00)

     

湾减1小时= 02.00.00

您可以使用TRUNC( date_value, format_mask )并减去INTERVAL字面值:

SELECT *
FROM   your_table
WHERE  date_column BETWEEN TRUNC( SYSDATE, 'hh24' ) - INTERVAL '1' HOUR
                       AND TRUNC( SYSDATE, 'hh24' );