不可逆的日期转换

    今天想根据输入的带季度值的分区名, 再转换成季度的日期, 如下所示:

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.

只是不明白Oracle为什么不做成完全对等支持。

可以理解。最主要是为了避免数据冲突。
比如:
select to_date('2008-2-08-08','YYYY-Q-MM-DD')
from dual

第二季度,8月份,肯定不能并存。如何取舍?
同理,除了Q, 象D,W,WW等也是无法用在to_date中的

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • Yes, a lot of friends.
  • 是的, 很多.
  • You must have enjoyed yourself.
  • 你一定玩的很开心.
  • Yes, and I took many pictures.
  • 是的, 我还照了好多照片.
  • Please let me see them.
  • 让我看看.
  • Will you go shopping with me?
  • 你跟我去买东西吗?