将 Oracle DATE 转换为 Unix 风格的时间(自 1906 年以来的秒数?)
Convert Oracle DATE to Unix-style time (seconds since 1906?)
我需要将 Oracle DATE 值转换为 Unix 样式的 seconds-since-epoch-start 值。
我尝试了 Oracle 转换的各种组合,例如:
select to_number(to_date('10/05/2019','mm/dd/yyyy')) from dual;
select to_number(to_timestamp(to_date('10/05/2019','mm/dd/yyyy'))) from dual;
select to_number(to_char(to_date('10/05/2019','mm/dd/yyyy'))) from dual;
似乎没有任何效果。有人对此有答案吗?
如果这是自 1906 年 1 月 1 日以来的秒数,则:
SQL> select sysdate - date '1906-01-01' days,
2 (sysdate - date '1906-01-01') * 24 * 60 * 60 unix_style
3 from dual;
DAYS UNIX_STYLE
---------- ----------
41555,811 3590422068
SQL>
为什么?因为 - 当您在 Oracle 中减去两个日期时,结果是 天 的数量。然后你必须将它乘以 24(因为一天有 24 小时),乘以 60(因为一小时有 60 分钟),然后再乘以 60(因为一分钟有 60 秒)。
当然,您可以将它乘以 86400(即 24 * 60 * 60),但是 - 前者很难理解,而后者 显示 发生了什么事以及为什么.
如果 - 正如 Wernfried 评论的那样 - 日期与您所说的不同,您只需将 date '1906-01-01'
替换为 date '1970-01-01'
。
我需要将 Oracle DATE 值转换为 Unix 样式的 seconds-since-epoch-start 值。
我尝试了 Oracle 转换的各种组合,例如:
select to_number(to_date('10/05/2019','mm/dd/yyyy')) from dual;
select to_number(to_timestamp(to_date('10/05/2019','mm/dd/yyyy'))) from dual;
select to_number(to_char(to_date('10/05/2019','mm/dd/yyyy'))) from dual;
似乎没有任何效果。有人对此有答案吗?
如果这是自 1906 年 1 月 1 日以来的秒数,则:
SQL> select sysdate - date '1906-01-01' days,
2 (sysdate - date '1906-01-01') * 24 * 60 * 60 unix_style
3 from dual;
DAYS UNIX_STYLE
---------- ----------
41555,811 3590422068
SQL>
为什么?因为 - 当您在 Oracle 中减去两个日期时,结果是 天 的数量。然后你必须将它乘以 24(因为一天有 24 小时),乘以 60(因为一小时有 60 分钟),然后再乘以 60(因为一分钟有 60 秒)。
当然,您可以将它乘以 86400(即 24 * 60 * 60),但是 - 前者很难理解,而后者 显示 发生了什么事以及为什么.
如果 - 正如 Wernfried 评论的那样 - 日期与您所说的不同,您只需将 date '1906-01-01'
替换为 date '1970-01-01'
。