在 where 子句中使用多个条件时出现关系运算符错误

Posted

技术标签:

【中文标题】在 where 子句中使用多个条件时出现关系运算符错误【英文标题】:relational operator error while using multiple condition in where clause 【发布时间】:2020-05-01 13:33:56 【问题描述】:

我有一个日期列,需要检查以下场景的几个条件.. 但看起来我做错了什么并因此出错

scenario:
If EmpBonusDate column is null or
if (sysdate-EmpBonusDate >= some constant number) then return 1 else 0

-- 我将 (sysdate-EmpBonusDate) 的输出乘以 24,所以我可以得到一个可以比较的数字以检查 >= 条件为常数。

这就是我的 sql 的样子

Select count(1) from employee emp where
Emp.IsActive = '1'
and (sysdate - emp.EmpBonusDate) * 24 >= 30 -- this works
-- or nvl(emp.EmpBonusDate,1) -- if I add or clause, I get [ORA-00920] invalid relational operator error.... 

任何线索我做错了什么以及如何获得上述场景的 1 或 0

【问题讨论】:

你能和Emp.IsActive = '1' and ((sysdate - emp.EmpBonusDate) * 24 >= 30 or emp.EmpBonusDate is null)一起试试吗? 出现错误或不提取行? @WoAiNii - 您可以将此作为答案发布.. 我会接受它.. 按预期工作.. 【参考方案1】:

使用or nvl(emp.EmpBonusDate,1) 语法,您缺少关系,因为您没有将该值与某物进行比较。

你可以用这个替换你的where子句

Emp.IsActive = '1' and ((sysdate - emp.EmpBonusDate) * 24 >= 30 or emp.EmpBonusDate is null)

这相当于你的 if 子句。

【讨论】:

以上是关于在 where 子句中使用多个条件时出现关系运算符错误的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis报无效的关系运算符异常

在 PL/SQL 存储过程中将多个变量传递给 WHERE 条件

Laravel 6:如何将多个 where 子句添加到关系中

使用必要的 WHERE 子句时出现“在 bool 上调用成员函数 bind_param()”错误 [重复]

SQL -------- WHERE子句与AND,OR和NOT运算符结合使用。

SQLite基础-7.子句