今天想根据输入的带季度值的分区名, 再转换成季度的日期, 如下所示:
SELECT ...
FROM ...
WHERE DATECOL >= TO_DATE('20&&partname.','YYYY"Q"Q')
AND DATECOL < ADD_MONTHS(TO_DATE('20&&partname.','YYYY"Q"Q'),3)
却发现怎么都不行, 报了一个Oracle错误. 正向是可以的.
SQL> SELECT TO_CHAR(SYSDATE,'YYYY-Q') FROM DUAL;
TO_CHA
------
2008-3
反向就不行了, 报日期的格式串不行.
SQL> SELECT TO_DATE('2008-3','YYYY-Q') FROM DUAL;
SELECT TO_DATE('2008-3','YYYY-Q') FROM DUAL
*
ERROR at line 1:
ORA-01820: format code cannot appear in date input format
其他的象年月日等都是可以的, 为什么季度不行呢?
留言 (3)
Some of the datetime format elements cannot be used in the TO_* datetime functions, such as Q.
Posted by allantrey | Jul 29, 2008 11:20 AM
只是不明白Oracle为什么不做成完全对等支持。
Posted by anysql | Jul 29, 2008 12:28 PM
可以理解。最主要是为了避免数据冲突。
比如:
select to_date('2008-2-08-08','YYYY-Q-MM-DD')
from dual
第二季度,8月份,肯定不能并存。如何取舍?
同理,除了Q, 象D,W,WW等也是无法用在to_date中的
Posted by rollingpig | Aug 12, 2008 5:31 PM