【问题标题】:Rounding Oracle SYSDATE to the nearest hour将 Oracle SYSDATE 舍入到最接近的小时
【发布时间】:2017-04-03 20:48:06
【问题描述】:

假设当前的 SYSDATE 是 03-APR-17 03.35.49,我的查询需要获取以下之间的值:

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

b. a 负 1 小时 = 02.00.00

我尝试过并发现使用“-1/24”会返回减去一小时的日期时间。对甲骨文来说有点新,所以在第一部分很挣扎。 不确定我是否应该使用 ROUND 或 FLOOR 或任何其他功能。 任何帮助表示赞赏。

【问题讨论】:

  • “舍入”到最近的过去小时根本不称为“舍入”,它被称为“截断”。 (这样就很容易记住要使用哪个函数了!)
  • 谢谢大家的帮助!

标签: sql oracle


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    这是截断值:

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

    圆它:

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

    或者:

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

    我忘了round() 也可以接受格式参数。

    【讨论】:

      【解决方案3】:

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

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

      b. a 负 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' );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多