今天在看文档的时候突然想到这个问题,一般而言,我们输入的都是日期,有可能会省略时间,但是如果省略日期,而只输入时间部分,结果会如何。
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日,恰好就是星期天,而如果指定星期一,则会导致日期冲突的错误。