日期:2014-05-17  浏览次数:20770 次

oracle时间问题
declare   DateValue   date;  
begin  
        select   sysdate   into   DateValue   from   dual;  
        dbms_output.put_line(to_char(DateValue   -   1));
end;
为什么我这样写只显示日期   22-8月   -07,  
一定要写成
dbms_output.put_line(to_char(DateValue   -   1,   'YYYY-MM-DD   HH24:MI:SS '));吗?

to_char( '2007-8-23   10:23:14 ',   'YYYY-MM-DD   HH24:MI:SS ')为什么报错(有太多 "to_char "   说明与此次调用相匹配)?

还有我想只做时间的比较,不要日期,应该怎么写?

------解决方案--------------------
to_char里面的参数必须为非字符串类型的值:


SQL> select to_char(to_date( '2007-8-23 10:23:14 ', 'YYYY-MM-DD HH24:MI:SS '), 'YYYY-MM-DD HH24:MI:SS ') from dual
2 ;

TO_CHAR(TO_DATE( '2007-8-2310:2
------------------------------
2007-08-23 10:23:14

SQL> select to_char(to_date( '2007-8-23 10:23:14 ', 'YYYY-MM-DD HH24:MI:SS '), 'HH24:MI:SS ') from dual;

TO_CHAR(TO_DATE( '2007-8-2310:2
------------------------------
10:23:14

SQL> select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS ') from dual;

TO_CHAR(SYSDATE, 'YYYY-MM-DDHH2
------------------------------
2007-08-22 22:58:30

如果比较时间:

where to_char(to_date( '2007-8-23 10:23:14 ', 'YYYY-MM-DD HH24:MI:SS '), 'HH24:MI:SS ') > to_char(sysdate, 'HH24:MI:SS ')


如果比较想日期+时间:
where to_date( '2007-8-23 10:23:14 ', 'YYYY-MM-DD HH24:MI:SS ') > sysdate

注意to_date里面的值为非date类型就可以了 ^_^