Where子句错误的Oracle案例

时间:2014-08-07 15:04:12

标签: sql oracle case where

我正在处理最终会变成参数的查询,但我对如何使WHERE子句工作感到困惑。

作为一个简单的例子,假设我有一个带有日期列的表,我想要获取日期范围的数据,如果布尔值设置为 OR ,只需获取上次日期的数据在表中,如果boolean = false ......我认为像这样的某些东西会起作用:

SELECT 
    * 
FROM 
    MyTable
WHERE
    CASE WHEN ('TRUE' = 'TRUE') THEN
        MyDate BETWEEN To_Date('2014-08-04', 'yyyy-MM-dd') AND To_Date('2014-08-05', 'yyyy-MM-dd')
    ELSE
        MyDate = (SELECT MAX(MyDate) FROM MyTable)
    END

显然,一旦我开始工作,我就会输入布尔值和2个日期的参数。

但我收到了Case子句THEN ...部分的错误 - BETWEEN关键字突出显示,错误为[1]: ORA-00905: missing keyword

如果我尝试单独使用任一语句(MyDate BETWEEN ...MyDate = ...)运行它,它的工作正常,只有当我将它放在CASE语句中时错误发生了......我做错了什么?

1 个答案:

答案 0 :(得分:2)

应将myDate =拉出case。但是,由于您同时使用between=,我建议您这样做:

SELECT * 
FROM MyTable
WHERE ('true' = 'true' and MyDate BETWEEN To_Date('2014-08-04', 'yyyy-MM-dd') AND To_Date('2014-08-05', 'yyyy-MM-dd')
OR    ('true' != 'true' and MyDate = (SELECT MAX(MyDate) FROM MyTable))