to_date函式與當前系統時間格式可否隱式轉換問題總結

還不算暈發表於2013-10-25

1.如to_date函式中時間格式與當前時間格式相符,可以不在函式中指定格式而完成隱式轉換。

BYS@bys1>select sysdate from dual;

SYSDATE
-------------------

2013/10/25 09:40:31


BYS@bys1>select to_date('2013/10/25 09:40:31') from dual;
TO_DATE('2013/10/25
-------------------
2013/10/25 09:40:31

當前日期格式下,下面幾種格式都可以隱式轉換--應該是日期間連線符使用特殊字元都沒問題,但是月與日、小時、分鐘要能對上。

不能使用&,&表示傳入變數。不能使用數字或字母字元。

BYS@bys1>select to_date('2013-02-21 10:00:00') from dual;
TO_DATE('2013-02-21
-------------------
2013/02/21 10:00:00


BYS@bys1>select to_date('2013-02#21 10:00+00') from dual;
TO_DATE('2013-02#21
-------------------
2013/02/21 10:00:00


BYS@bys1>select to_date('2013-02a21 10:00+00') from dual;
select to_date('2013-02a21 10:00+00') from dual
               *
ERROR at line 1:
ORA-01861: literal does not match format string


BYS@bys1>select to_date('2013-02921 10:00+00') from dual;
select to_date('2013-02921 10:00+00') from dual
               *
ERROR at line 1:
ORA-01861: literal does not match format string


BYS@bys1>select to_date('2013-02@21 10:00+00') from dual;
TO_DATE('2013-02@21
-------------------
2013/02/21 10:00:00

如果to_date函式中格式-欄位長度與系統的不符的幾種情況:

把最後的表示秒的字元省略,可以正常顯示。

BYS@bys1>select to_date('2013-02@21 10:00') from dual;
TO_DATE('2013-02@21
-------------------
2013/02/21 10:00:00

把最後的表示秒的字元及表示具體幾號的字元省略,報錯。
BYS@bys1>select to_date('2013-@21 10:00') from dual;
select to_date('2013-@21 10:00') from dual
               *
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected


只給出10點,分和秒未給出,以0代替。

BYS@bys1>select to_date('2013-02@21 10') from dual;
TO_DATE('2013-02@21
-------------------
2013/02/21 10:00:00

只給出日期的欄位,時、分、秒用0來代替。
BYS@bys1>select to_date('2013-02@21 ') from dual;
TO_DATE('2013-02@21
-------------------
2013/02/21 00:00:00


只給出年-月,未給幾號,報錯。
BYS@bys1>select to_date('2013-02 ') from dual;
select to_date('2013-02 ') from dual
               *
ERROR at line 1:
ORA-01840: input value not long enough for date format

BYS@bys1>select to_date('2013-02$1 ') from dual;
TO_DATE('2013-02$1'
-------------------
2013/02/01 00:00:00

2.to_date函式中時間格式與當前時間格式不符,需要在函式中顯式指定時間格式來完成轉換。

BYS@bys1>select sysdate from dual;
SYSDATE
---------
25-OCT-13

注意列寬,以免不能顯示全。

BYS@bys1>col aa for a20
BYS@bys1>select to_date('2013-02-21 10:00:00','yyyy-mm-dd hh24:mi:ss') aa from dual;
AA
--------------------
21-FEB-13


不指定格式會報錯:

BYS@bys1>select to_date('2013-02-21 10:00:00') from dual;
select to_date('2013-02-21 10:00:00') from dual
               *
ERROR at line 1:
ORA-01861: literal does not match format string

相關文章