无法将数字转换为日期

时间:2014-04-14 06:21:17

标签: sql oracle date-arithmetic

我将数字列转换为日期有问题,我做了以下

SELECT to_date('12-30-1899 1:00:00','MM-DD-YYYY HH24:Mi:SS') + (createDate/1440) 
FROM table_A;

并获得了查询结果

10/17/5826 17:18

包括小时和秒在内的月份和日期是正确的,但是年份不同,我得到了5826.对于其他行,我也得到了相同的结果。我确实关注了here的一些例子。但结果仍然是错误的。任何人都可以帮助这个感谢。

以下示例是createDate列值:

1300844909778
1302831103113
1303210978316
1396963615616

2 个答案:

答案 0 :(得分:3)

Oracle中的日期算术假设。就目前而言,您将一个非常大的数字除以1440,并将该天数添加到您的开始日期。这就是为什么你在遥远的未来取得成果的原因。

那么createdate代表什么价值?这显然不是一个实际的日期。您选择1440作为分母表明您认为它的意思是“分钟数”,但如果日期远远超出预期,那么它也不是。


我认为可能是代表in the Unix epoch的值,因为数字以13开头。除了他们太大了。当前的Unix时间戳应为十位数。你有十三位数。

它们可以是Unix纪元还是毫秒?

我创建了一个SQLfiddle来测试这个理论。将createdate值的前十位数作为秒处理并将该数字添加到Unix日期会产生合理的日期。 Check it out

所以这个理论有用。但我对你的查询没有帮助。一起添加两个日期没有任何意义。你究竟想要实现什么目标?如果您正在寻找间隔,则需要从较晚的日期中减去较早的日期。

答案 1 :(得分:0)

createDate可以是毫秒数。这只是猜测。如果是这样,那么这可能会有所帮助:

SELECT to_date('12-30-1899 1:00:00','MM-DD-YYYY HH24:Mi:SS') + (1300844909778/(1000*60*60*24))
FROM dual
/

3/21/1941 2:48:30 AM