我正在处理最终会变成参数的查询,但我对如何使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
语句中时错误发生了......我做错了什么?
答案 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))