Oracle:如何从日期时间中减去毫秒?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

我认为这很简单,但事实并非如此。

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.

扫码关注云+社区