你需要指定零小數秒。這是你的錯誤:
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)將圓任何小數秒,在半秒四捨五入。這個問題的重要程度取決於你如何填寫專欄以及時間需要多準確。
來源
2013-07-24 10:15:17
APC
謝謝你指出這一點。 – user75ponic