2013-07-24 30 views
0

我在下文提到的格式的數據,當我試圖插入到表中我得到錯誤ORA-01858:試圖插入時間戳時出錯(0)列

ORA-01858: a non-numeric character was found where a numeric was expected 

我怎樣才能順利地插入記錄到表中?

create table mytab (dt timestamp(0)); 

Insert into mytab 
    (dt) 
Values 
    (TO_TIMESTAMP('16/JUL/13 2:53:08. PM','DD/MON/YY fmHH12fm:MI:SS.FF AM')); 

回答

3

你需要指定零小數秒。這是你的錯誤:

SQL> create table mytab (dt timestamp(0)); 

Table created. 

SQL> Insert into mytab 
    (dt) 
Values 
    (TO_TIMESTAMP('16/JUL/13 2:53:08. PM','DD/MON/YY fmHH12fm:MI:SS.FF AM')); 2 3 4 
    (TO_TIMESTAMP('16/JUL/13 2:53:08. PM','DD/MON/YY fmHH12fm:MI:SS.FF AM')) 
       * 
ERROR at line 4: 
ORA-01858: a non-numeric character was found where a numeric was expected 

SQL> 

讓我們來解決輸入

SQL> ed 
Wrote file afiedt.buf 

    1 Insert into mytab 
    2  (dt) 
    3 Values 
    4* (TO_TIMESTAMP('16/JUL/13 2:53:08.00 PM','DD/MON/YY fmHH12fm:MI:SS.FF AM')) 
SQL> r 
    1 Insert into mytab 
    2  (dt) 
    3 Values 
    4* (TO_TIMESTAMP('16/JUL/13 2:53:08.00 PM','DD/MON/YY fmHH12fm:MI:SS.FF AM')) 

1 row created. 

SQL> 

所以,即使您指定一個零精度的時間戳,您輸入仍然需要相匹配的面具。這意味着您需要有.00以匹配.FF

可替換地,不打擾包括秒的小數部分在所有:

SQL> ed 
Wrote file afiedt.buf 

    1 insert into mytab 
    2  (dt) 
    3 Values 
    4* (TO_TIMESTAMP('16/JUL/13 2:53:08 PM','DD/MON/YY fmHH12fm:MI:SS AM')) 
SQL> r 
    1 insert into mytab 
    2  (dt) 
    3 Values 
    4* (TO_TIMESTAMP('16/JUL/13 2:53:08 PM','DD/MON/YY fmHH12fm:MI:SS AM')) 

1 row created. 

SQL> 

順便提及,請注意,時間戳(0)將圓任何小數秒,在半秒四捨五入。這個問題的重要程度取決於你如何填寫專欄以及時間需要多準確。

+1

謝謝你指出這一點。 – user75ponic

1

你有一個「。」分鐘

之後這部作品

select TO_TIMESTAMP('16/JUL/13 2:53:08 PM','DD/MON/YY fmHH12fm:MI:SS.FF AM') 
from dual 
+0

我同意這個作品,但我總是比較愉快的時候輸入字符串平衡面具。 – APC

+0

@APC是的,這是更好 – slavoo

2

你需要第二部分:

Insert into mytab(dt) 
Values 
    (TO_TIMESTAMP('16/JUL/13 2:53:08.00 PM','DD/MON/YY fmHH12fm:MI:SS.FF AM'));