我将数字列转换为日期有问题,我做了以下
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
答案 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