sql - 动态跳过 Where 子句

标签 sql database oracle dynamic where

是否可以动态跳过where子句?

我正在努力实现同样的目标。

select count(*)
      into user_count
from mstuser a
where ((gender_compare is not null or gender_compare != '') 
   and upper(a.gender)=upper(gender_compare)) 
   and (age_compare_group is not null or age_compare_group != '') 
   and (MONTHS_BETWEEN(sysdate, a.dob) / 12 
        between substr(age_compare_group, 0, INSTR(age_compare_group, '-') - 1) 
            and substr(age_compare_group, INSTR(age_compare_group, '-') + 1)))

但是好像不行。

我想要的是:

如果值 gender_compareage_compare_group 都为 null,它应该给出所有结果。 如果其中任何一个不为空,那么它应该根据查询的 where 部分显示结果。

让我知道我是否可以为此做一些其他事情。

最佳答案

看起来你要做的是将你的情况分成两组

WHERE (gender_compare IS NULL OR gender_compare = '')
      OR (<the rest of condition>)

如果 genter_compare IS NULL 的计算结果为 TRUE,则整个条件将为 TRUE,因此 WHERE 子句将等同于 WHERE TRUE,相当于根本没有 WHERE 语句。

否则,第二个条件有效。

关于sql - 动态跳过 Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20344877/

相关文章:

sql - 微软 SQL Server Management Studio 2012 中的白色圆圈

c# - 无效的列名sql错误

mysql - 关注/取消关注组或列表的数据库架构

python - 当没有这样的命名列时,SQLite 给出找不到列的错误

oracle - 将Joda DateTime映射到Grails中的Oracle Timestamp

尽管有提示,Oracle 并不使用隐形索引

sql - Mysql 按逗号分隔的列值排序

mysql - MariaDB 和 1064 错误

c# - 使用 EF 向表中添加新行时违反主键约束

oracle - 在 Oracle 中使用 TIMEZONE 更改 TIMESTAMP 的时区组件