内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
我认为这很简单,但事实并非如此。
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY')
- 1/(24*50*60*1000) data
FROM dual;
它根本不起作用。
其他详情:
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') -
NUMTODSINTERVAL(1/(24*50*60*1000),'HOUR') data
FROM dual;
不起作用..
似乎是
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') -
NUMTODSINTERVAL(1/(24*25*60*1000),'HOUR') data
FROM dual;
为什么?它是如何工作的?
要增加或减少表示为文字的时间量,可以使用INTERVAL。
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY')
- INTERVAL '0.001' SECOND
FROM dual;
现在还有标准的表示日期和时间文字的方法,并避免使用各种数据库特定的转换函数。
SELECT TIMESTAMP '2012-10-08 00:00:00'
- INTERVAL '0.001' SECOND DATA
FROM dual;
对于你原来的问题,一天的时间部分存储在分数天。所以,一秒钟是:
1 / (hours in day * minutes in hour * seconds in a minute)
除以1000以获得毫秒。
1 / (24 * 60 * 60 * 1000)
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') - NUMTODSINTERVAL(1/(24*50*60*1000),'HOUR') data
FROM dual;
DATA
---------------------------------
09/AUG/12 11:59:59.999950000 PM
1 row selected.