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