sql语句的where条件中,通过case when做到类似if判断的效果 |
您所在的位置:网站首页 › sql语句如何拼接 › sql语句的where条件中,通过case when做到类似if判断的效果 |
今天需要处理一个需求:在只通过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 |