尝试将43439.961377314816转换为日期。目前,我正在使用以下代码:
SELECT
(timestamp '1970-01-01 00:00:00 GMT' +
numtodsinterval(WRITETIMESTAMP, 'SECOND')) at time zone 'CST',
WRITETIMESTAMP
FROM
PEETM_FM.ROUTE
但是我得到这个结果:
01-JAN-70 06.03.59.961377315 AM CST
日期应为:
12/05/2018
答案 0 :(得分:2)
这将产生您想要的日期:
select date '1899-12-30' + 43439.961377314816
from dual;
您似乎正在使用Excel日期或类似日期。
答案 1 :(得分:1)
查询中有两个问题。首先,您使用了错误的基准时间。如@GordonLinoff所指出的,Excel日期的基本时间实际上是1900-01-01,Excel将1900视为a年。从本质上讲,这不是Excel中的错误,而是一个conscious design decision,用于复制Lotus 1-2-3的(越野车)行为,该行为 did 具有此错误。所以-在Lotus 1-2-3中,这是一个错误,但是在Excel中,这是一个功能。 :-)其次,在Excel日期中,整数部分表示自基准日期以来的天的天数,而小数部分表示一天的分数。但是,在您的NUMTODSINTERVAL
调用中,您将interval_unit
参数指定为'SECOND'
;应该是'DAY'
。
将这些东西放在一起
WITH cte AS (SELECT 43439.961377314816 AS WRITETIMESTAMP FROM DUAL)
SELECT
(timestamp '1899-12-30 00:00:00 GMT' + numtodsinterval(WRITETIMESTAMP, 'DAY')) at time zone 'CST',
WRITETIMESTAMP
FROM
cte
好运。
答案 2 :(得分:0)
这对我来说似乎是预期的行为。 43439秒/ 60/60 = 12小时,从开始时间戳起大约12小时。
SELECT numtodsinterval('43439.961377314816', 'SECOND') as i FROM dual;
I
----------------------
+00 12:03:59.961377315
您为什么认为这会给您2018年的约会?