sql语句的where条件中,通过case when做到类似if判断的效果

您所在的位置:网站首页 sql语句如何拼接 sql语句的where条件中,通过case when做到类似if判断的效果

sql语句的where条件中,通过case when做到类似if判断的效果

2023-05-22 05:06| 来源: 网络整理| 查看: 265

今天需要处理一个需求:在只通过sql代码的条件下,根据某个字段的值,来确定某个where条件是否生效。

需要修改的sql如下所示:

SELECT yzmc FROM uf_yzbbtz WHERE ( dq = '$ssdq1$' OR dq1 = $ssdq$ OR instr( gxfb, '$ssdq$' )> 0 ) AND lxyzzt IN ( $yzztyc$ ) AND yzjb IN ( $yzjbyc$ ) AND yzlb = '$yzfl1$' AND sfyx =0

需求是需要根据表单上的值例如 ‘$ssdq$’(这个值是执行sql前就取到),来判断是否需要在where条件中加入以下条件

(dq = '$ssdq1$' OR dq1 = $ssdq$ OR instr( gxfb, '$ssdq$' )> 0 )

实现方式是通过case when,实现sql如下图所示:

SELECT yzmc FROM uf_yzbbtz WHERE lxyzzt IN ( $yzztyc$ ) AND yzjb IN ( $yzjbyc$ ) AND yzlb = '$yzfl1$' AND sfyx = 0 AND CASE WHEN '31742' = '$ssdq$' THEN 1 ELSE CASE WHEN dq = '$ssdq1$' THEN 1 WHEN dq1 = '$ssdq$' THEN 1 WHEN instr( gxfb, '$ssdq$' ) > 0 THEN 1 ELSE 0 END END = 1

下面解释一下AND CASE后面的逻辑是如何执行的: 当’31742’ = '$ssdq$'时返回 1 ,代表着整个CASE WHEN 的语句执行完毕,相当于在最后一个AND后面拼接一个1。

当’31742’ = '$ssdq$'不满足条件时执行ELSE中的CASE WHEN,这里面的可以等价于以下条件:

dq = '$ssdq1$' or dq1 = '$ssdq$' or instr( gxfb, '$ssdq$' ) > 0

如果都不满足,就通过ELSE 0 返回 0。

END = 1它的作用是确定当前 CASE 表达式的结果是否等于1,具体来说,CASE 表达式中的嵌套结构是为了根据不同的条件返回不同的值,其中每个 CASE 子句都返回一个 0 或 1 的值,这些值最终通过逻辑运算符(AND、OR)来确定整个表达式的结果。因此,当子句 “END = 1” 被评估为 TRUE 时,表示整个 CASE 表达式的结果为 1,否则结果为 0。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3