Oracle 在不考虑时间的情况下以天为单位的日期之间的差异

问题描述

如何在不考虑时间(小时、分钟、秒)的情况下从 CURRENT_TIMESTAMP 获取天数。 例如。 CURRENT_TIMESTAMP24-JUN-21 00.01.01 AMEVENT_TIMESTAMP23-JUN-21 07.00.00 PM 那么它应该返回 1 天差。

以下查询为上述值返回 0 天,因为时差小于 24 小时。

SELECT EXTRACT(DAY FROM (CURRENT_TIMESTAMP - EVENT_TIMESTAMP)) FROM TABLE;

下面的查询返回我到晚上 7 点的 1 天差异,它在同一日期的晚上 7 点之后开始显示 2 天差异。

SELECT CEIL(SYSDATE - CAST(EVENT_TIMESTAMP AS DATE)) FROM TABLE;

谢谢。

解决方法

如果我理解正确,您应该只截断这些值:

SQL> select   trunc(to_date('24.06.2021 00:01:01','dd.mm.yyyy hh24:mi:ss'))
  2         - trunc(to_date('23.06.2021 07:00:00','dd.mm.yyyy hh24:mi:ss')) result
  3  from dual;

    RESULT
----------
         1

SQL>

TRUNC 将“删除”时间组件(实际上,将其设置为 午夜)并且您只会减去日期。 Oracle 中两个 DATE 数据类型值的差异表示它们之间的天数,所以......也许这就是您要寻找的。​​p>