TO_DATE函式的小問題(二)

yangtingkun發表於2011-05-16

今天在看文件的時候突然想到這個問題,一般而言,我們輸入的都是日期,有可能會省略時間,但是如果省略日期,而只輸入時間部分,結果會如何。

TO_DATE函式的小問題:http://yangtingkun.itpub.net/post/468/82264

 

 

問題還是透過例子來說明:

SQL> create table t_date (d date);

Table created.

SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> insert into t_date values ('2011-05-16 23:24:53');

1 row created.

SQL> insert into t_date values (to_date('23:24:53', 'hh24:mi:ss'));

1 row created.

SQL> insert into t_date values (to_date('24:53', 'mi:ss'));

1 row created.

SQL> select * from t_date;

D
-------------------
2011-05-16 23:24:53
2011-05-01 23:24:53
2011-05-01 00:24:53
2011-05-01 00:00:53

可以看到,無論輸入時間資訊的哪個部分,都遵循這樣的規律:

輸入日期不包括的時分秒資訊都預設為0

輸入日期不包括的日部分,預設為1日;

輸入日期不包括的月份部分,預設為當前月;

輸入日期不包括的年份部分,預設為當前年;

公元資訊預設為公元后。

最後看一個例子來驗證這個結論:

SQL> select to_date(1, 'd') from dual;

TO_DATE(1,'D')
-------------------
2011-05-01 00:00:00

SQL> select to_date(2, 'd') from dual;
select to_date(2, 'd') from dual
*
ERROR at line 1:
ORA-01835: day of week conflicts with Julian date

第一個查詢中日期僅指定了星期日,年月日和時分秒資訊都不包括,而結論顯然和上面的一致。但是需要注意,今年當前月的1日,恰好就是星期天,而如果指定星期一,則會導致日期衝突的錯誤。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-695520/,如需轉載,請註明出處,否則將追究法律責任。

相關文章