2010-12-14 22 views
3
SQL> select to_timestamp('2010-12-14:09:56:53') - to_timestamp('2010-12-14:09:56:46') from dua 
l; 
select to_timestamp('2010-12-14:09:56:53') - to_timestamp('2010-12-14:09:56:46') from dual 
        * 
ERROR at line 1: 
ORA-01843: not a valid month 


SQL> select to_date('2010-12-14:09:56:53') - to_date('2010-12-14:09:56:46') from dual; 
select to_date('2010-12-14:09:56:53') - to_date('2010-12-14:09:56:46') from dual 
       * 
ERROR at line 1: 
ORA-01861: literal does not match format string 

什麼是做一個ORA-01843 「不是有效的月」 和ORA-01861 「的文字不匹配格式字符串」

2010-12-14:09:56:53 
minus 
2010-12-14:09:56:46 
用Oracle SQL

正確的方法是什麼?

+1

這或許不應該被標記的sqlplus - 怎麼樣,而不是SQL感謝 – 2010-12-14 19:21:45

回答

12

你必須按指定的規格,你的時刻字符串是要TO_DATETO_TIMESTAMP功能:

select 
    to_date('2010-12-14:09:56:53', 'YYYY-MM-DD:HH24:MI:SS') - 
    to_date('2010-12-14:09:56:46', 'YYYY-MM-DD:HH24:MI:SS') 
from dual; 

結果將是天,這可以通過86,400乘以獲得秒數:

TO_DATE('2010-12-14:09:56:53','YYYY-MM-DD:HH24:MI:SS')-TO_DATE('2010-12-14:09:56 
-------------------------------------------------------------------------------- 
.000081019 

使用TO_TIMESTAMP

select 
    to_timestamp('2010-12-14:09:56:53', 'YYYY-MM-DD:HH24:MI:SS') - 
    to_timestamp('2010-12-14:09:56:46', 'YYYY-MM-DD:HH24:MI:SS') 
from dual; 

結果將是TIMESTAMP格式:

TO_TIMESTAMP('2010-12-14:09:56:53','YYYY-MM-DD:HH24:MI:SS')-TO_TIMESTAMP('2 
--------------------------------------------------------------------------- 
+000000000 00:00:07.000000000 
+0

+1顯示所有變化 – 2010-12-14 19:10:20

2

使用to_timesatmp

select TO_TIMESTAMP('2010-12-14:09:56:53', 'YYYY-MM-DD:HH24:MI:SS.FF') 
- TO_TIMESTAMP('2010-12-14:09:56:46', 'YYYY-MM-DD:HH24:MI:SS.FF') 

from dual 
+0

,這個工程。我怎樣才能在幾秒鐘內得出結果? – Moeb 2010-12-14 18:54:21

+0

VLS的答案詳細介紹瞭如何做到這一點 – 2010-12-14 19:10:57

相關問題