我认为这真的很简单,但事实并非如此。
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;
为什么?它怎麽工作?
发布于 2012-09-07 08:23:27
要增加或减少以文字表示的时间量,可以使用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)
发布于 2012-09-06 20:44:07
这是正确的(1毫秒等于1000秒):-
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') - NUMTODSINTERVAL(1/1000,'SECOND') data FROM dual;
DATA
-----------------------------
09-AUG-12 23.59.59.999000000
至于为什么其他代码不能工作,那是因为你没有正确计算一毫秒。小时必须除以60表示分钟,再除以60表示给定的秒,然后除以1000表示毫秒,因此,如果您必须使用小时作为间隔,则它是:-
SELECT TO_TIMESTAMP('10/08/2012','DD/MM/YYYY') - NUMTODSINTERVAL(1/(60*60*1000),'HOUR') as data FROM dual;
DATA
---------------------------------------------------------------------------
09-AUG-12 23.59.59.999000000
发布于 2012-09-06 21:57:03
select TO_CHAR(TO_TIMESTAMP('10.05.2012', 'DD.MM.YYYY') -
NUMTODSINTERVAL(1/1000, 'SECOND'), 'DD.MM.YYYY HH24:MI:SS:FF3') Res
from dual;
RES
-----------------------------
09.05.2012 23:59:59.999
https://stackoverflow.com/questions/11900470
复制相似问题