【问题标题】:How can I subtract the system date? [closed]如何减去系统日期? [关闭]
【发布时间】:2020-04-17 03:38:47
【问题描述】:
SELECT SYSDATE - TO_DATE('1-02-2009', 'DD-MM-YYYY')
FROM DUAL;

但不起作用:/

输出:

3981.202453703703703703703703703703703704

【问题讨论】:

  • 可能对你有帮助 网址:-stackoverflow.com/questions/1646001/…
  • “但不起作用:/”不是对特定问题或疑问的描述。
  • 它确实有效。我猜你的期望是错误的。当您在 Oracle 中减去 2 个日期时,结果是一个浮点数,表示它们之间的天数。其中数字的整数部分是完整的天数,小数部分是表示的小时、小步舞曲、秒和一天的小数部分。

标签: sql oracle


【解决方案1】:

在 Oracle 中减去两个日期会得到天数的差异。

要获得小时数、分钟数或秒数,您需要将它们分别乘以一天中的小时数、一天中的分钟数或一天中的秒数,如下所示:

SQL> SELECT
  2      ROUND(SYSDATE - TO_DATE('01-02-2009', 'DD-MM-YYYY'), 2) AS DIFF_IN_DAYS,
  3      ROUND((SYSDATE - TO_DATE('01-02-2009', 'DD-MM-YYYY')) * 24, 2) AS DIFF_IN_HOURS,
  4      ROUND((SYSDATE - TO_DATE('01-02-2009', 'DD-MM-YYYY')) * 24 * 60, 2) AS DIFF_IN_MINUTES,
  5      ROUND((SYSDATE - TO_DATE('01-02-2009', 'DD-MM-YYYY')) * 24 * 60 * 60, 2) AS DIFF_IN_SECONDS
  6  FROM
  7      DUAL;

DIFF_IN_DAYS DIFF_IN_HOURS DIFF_IN_MINUTES DIFF_IN_SECONDS
------------ ------------- --------------- ---------------
     3981.53      95556.78      5733406.58       344004395

SQL>

干杯!!

【讨论】:

    【解决方案2】:

    正如 Belayer 所评论的,小数部分只不过是用小时、小步舞曲、秒表示的差异,因为 SYSDATE 是默认的时间戳值。如果你只想要你可以使用的整数 -

    SELECT TRUNC(SYSDATE) - TO_DATE('01-02-2009', 'DD-MM-YYYY')
    FROM DUAL;
    

    【讨论】:

      【解决方案3】:

      “但不起作用”没有帮助,您期望什么?查询完全按照它应该的方式工作。

      也许你正在寻找这个:

      SELECT localtimestamp - TO_DATE('1-02-2009', 'DD-MM-YYYY')
      FROM DUAL;
      
      +3981 11:27:50.848929
      

      当您从DATE 中减去DATE 时,Oracle 会返回这两个日期之间的天数。但是你可以从TIMESTAMP中减去,那么结果就是INTERVAL DAY TO SECOND,见Datetime/Interval Arithmetic

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-14
        • 1970-01-01
        相关资源
        最近更新 更多