Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Where子句错误中的Oracle案例_Sql_Oracle_Case_Where - Fatal编程技术网

Sql Where子句错误中的Oracle案例

Sql Where子句错误中的Oracle案例,sql,oracle,case,where,Sql,Oracle,Case,Where,我正在处理一个最终将变为参数化的查询,但我对如何使我的WHERE子句起作用感到困惑 作为一个简单的例子,假设我有一个带有日期列的表,如果布尔值设置为,我想获取日期范围的数据,或者如果布尔值为false,我想获取表中最后一个日期的数据。。。我想像这样的东西会有用的: SELECT * FROM MyTable WHERE CASE WHEN ('TRUE' = 'TRUE') THEN MyDate BETWEEN To_Date('2014-08-0

我正在处理一个最终将变为参数化的查询,但我对如何使我的
WHERE
子句起作用感到困惑

作为一个简单的例子,假设我有一个带有日期列的表,如果布尔值设置为,我想获取日期范围的数据,或者如果布尔值为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子句的
部分的一个错误-突出显示了
BETWEEN
关键字,错误是
[1]:ORA-00905:缺少关键字


如果我尝试分别使用任一语句运行它(
mydatebetween…
MyDate=…
),它工作得很好,只有当我将它放入
CASE
语句中时,才会发生错误。。。我做错了什么?

应该将
myDate=
拖出
案例
。但是,由于您在
和=之间同时使用了
,因此我建议您:

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))