Oracle 和 EDB (Postgres) 中的日期差异

Date Difference in Oracle And EDB (Postgres)

如果是 Oracle 查询

select SYSDATE - TO_DATE('23-03-1022','dd-mm-yyyy') from dual;

正在提供输出

SYSDATE-TO_DATE('23-03-1022','DD-MM-YYYY')
------------------------------------------
                                21715.2233

在 EDB/Postgres 的情况下是-

select SYSDATE - TO_DATE('23-03-1022','dd-mm-yyyy') as date;
      date
---------------------
 21715 days 05:23:13
(1 row)

如果是 Postgres,如何获得与 oracle 相同的输出?

对于 Oracle,.2233 说明了什么?

在 Oracle 中,SYSDATE 是 returns 日期 时间组件的函数。两个 DATE 数据类型值的差异 returns 它们之间的天数。因此,由于 SYSDATE 还包含小时、分钟和秒,因此您几乎总是会得到一个十进制数作为结果(除非您 运行 在午夜的那段代码)。

因此,我假设你 - 实际上 - 想要 t运行cate SYSDATE 然后“删除”时间组件(将其设置为 00:00:00):

SQL> select SYSDATE - TO_DATE('30-12-1899','dd-mm-yyyy') from dual;

SYSDATE-TO_DATE('30-12-1899','DD-MM-YYYY')
------------------------------------------
                                44715.3208

SQL> select trunc(SYSDATE) - TO_DATE('30-12-1899','dd-mm-yyyy') from dual;

TRUNC(SYSDATE)-TO_DATE('30-12-1899','DD-MM-YYYY')
-------------------------------------------------
                                            44715

SQL>

截至 0.2279:如我所说,它是 的天数。快速演示一下:如果你想得到小时数,你可以将它乘以 24(其余部分乘以 60 得到分钟,其余部分再次乘以 60 得到秒):

SQL> select 0.2279 * 24 as hours from dual;

     HOURS
----------`enter code here`
    5.4696

SQL> select 0.4696 * 60 as minutes from dual;

   MINUTES
----------
    28.176

SQL> select 0.176 * 60 as seconds from dual;

   SECONDS
----------
     10.56

SQL>

这意味着您 运行 查询 今天 在 05:28:10.