不可逆的日期转换
Oracle » http://www.anysql.net/oracle/get_the_credit_card.html 2008-07-28今天想根据输入的带季度值的分区名, 再转换成季度的日期, 如下所示:
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
其他的象年月日等都是可以的, 为什么季度不行呢?


Some of the datetime format elements cannot be used in the TO_* datetime functions, such as Q.
只是不明白Oracle为什么不做成完全对等支持。
可以理解。最主要是为了避免数据冲突。
比如:
select to_date(’2008-2-08-08′,’YYYY-Q-MM-DD’)
from dual
第二季度,8月份,肯定不能并存。如何取舍?
同理,除了Q, 象D,W,WW等也是无法用在to_date中的
季度只是日期的一个计算结果, 本身并不是日期格式的一部分啊..
所以只能展示, 而不可反向啊..
table 可以通过view来过滤, 但是没有查询所有记录的view 是不容易反向处理日期的..