【发布时间】:2012-07-26 09:51:41
【问题描述】:
尝试在 Oracle 中运行以下查询时出现ORA-00905: missing keyword 错误:
select distinct MONTH_ID
from DSS_MAIN.DIM_TIME a1
where Case When TO_CHAR(SYSDATE,'MM') < 3
Then TO_CHAR(a1.MONTH_START_DATE,'YYYYMM') Between (TO_CHAR(SYSDATE,'YYYY')-1)||'03' And TO_CHAR(SYSDATE,'YYYYMM')
Else TO_CHAR(a1.MONTH_START_DATE,'YYYYMM') Between TO_CHAR(SYSDATE,'YYYY')||'03' And TO_CHAR(SYSDATE,'YYYYMM')
End;
各个Between 子句工作正常,所以我假设Case 语法有问题。
有什么想法吗?
【问题讨论】:
-
case 语句中的
TO_CHAR(a1.MONTH_START_DATE,'YYYYMM') Between (TO_CHAR(SYSDATE,'YYYY')-1)||'03' And TO_CHAR(SYSDATE,'YYYYMM')没有意义。你想检索什么(你能用英语解释一下)吗? -
另外,表达式
TO_CHAR(SYSDATE,'YYYY')-1也没有任何意义。为什么要从 string 中减去 1? -
@a_horse_with_no_name: 同意...但我猜 Oracle 的隐式转换规则只是将其转换为数字(例如
select to_char(sysdate,'YYYY') -1 from dual;-> 2011 -
我正在尝试获取从 3 月到 2 月的一年的年初至今月份的列表。例如,如果 SYSDATE 为 2012 年 6 月,则应返回 2012 年 3 月 - 2012 年 6 月。如果 SYSDATE 为 2013 年 2 月,则应返回 2012 年 3 月 - 2013 年 2 月
-
@EvanMPW 如果答案有效,你能接受吗?