精华内容
下载资源
问答
  • where和when的用法
    千次阅读
    2021-12-20 06:07:25

    SQL之CASE WHEN基础用法详解(一)

    SQL之CASE WHEN用法进阶——where语句后跟case语句(二)

    SQL之CASE WHEN用法进阶——Update语句使用case更新、数据对比(三)

    在where后面使用case when的说明
    报错语句

    select *
    from A, B
    where B.name in
    CASE
    when A.id = 0 then ('aaa', 'bbb')
    when A.id = 1 then ('bbb', 'ccc')
    when A.id = 2 then ('ccc', 'ddd')
    END
    


    正确写法:将B.name in 放到CASE END 中

    select *
    from A, B
    where
    CASE
    when A.id = 0 then B.name in ('aaa', 'bbb')
    when A.id = 1 then B.name in ('bbb', 'ccc')
    when A.id = 2 then B.name in ('ccc', 'ddd')
    END
    


    补充:当使用 B.name = 时,将不会出现以上问题,也就是如下写法也正确

    select *
    from A, B
    where B.name =
    CASE
    when A.id = 0 then 'aaa'
    when A.id = 1 then 'bbb'
    when A.id = 2 then 'ccc'
    END
    
    更多相关内容
  • NULL 博文链接:https://vernonchen163.iteye.com/blog/1908053
  • sql 动态修改where查询 case when用法

    千次阅读 2020-08-14 16:56:04
    简单Case函数Case搜索函数。 第一种 格式 : 简单Case函数 : case 列名 when 条件值1 then 选项1 when 条件值2 then 选项2....... else 默认值 end 第二种 格式 :Case搜索函数 case when 列名= 条件值1 then...

    case when的使用方法

    Case具有两种格式。简单Case函数和Case搜索函数。

    第一种 格式 : 简单Case函数 :

    case 列名
        when 条件值1 then 选项1
        when 条件值2 then 选项2.......
        else 默认值 end
    

    第二种 格式 :Case搜索函数

    case  
        when 列名= 条件值1 then  选项1
        when 列名=条件值2 then  选项2.......
        else 默认值 end
    

    case when 其实相当于switch用法
    结尾一定要加end。

    case when常用的使用场景

    1.比方说这种又有筛选又有搜索的地方,需要动态修改where来查询条件
    在这里插入图片描述

    /* 
      * $keyWords 传过来的搜索关键字
      * $status   传过来的筛选条件
      * userName ,status  表里的字段
      * case when $status then status=$status  判断 $status 值为true,走then后面的条件,后面的条件都不执行
      * else status=status  上面的条件 不成立,执行这个条件。 status=status 等同于查询全部 或者写成 1=1
    */
    $sql="select * from 表名 where userName like '%$keyWords%' and 
    	  case when $status then status=$status
    	  else status=status
    	  end"
    

    2.比方说在设计数据库时,习惯把用户性别用int存储('0’不男不女, '1’是女,'2’是男)

    $sql="select 
          case sex 
          when 0 then '不男不女'
          when 1 then '女'
          else '男' end 
          from 表名"
    
    展开全文
  • where后面case-when用法

    千次阅读 2019-12-11 15:31:15
     主要是想根据某个字段的不同,执行不同的where条件,很明显在Mysql下是可以直接通过case-when来写,但是oracle的case-when则不行,同样的sql修改成oracl的语法就会报错,不支持这种方式。但是如果真的存在这种业务...
    1. 准备测试数据,建表语句
      drop table test_table;
      create table test_table
      (
        col_a        NUMBER,
        col_b        NUMBER,
        col_c        VARCHAR2(5)
      )
      
      insert into test_table values(2, 1, '>');
      insert into test_table values(1, 2, '>=');
      insert into test_table values(2, 1, '<');
      insert into test_table values(1, 2, '<=');
      insert into test_table values(2, 2, '=');

       

    2. 测试目的

          主要是想根据某个字段的不同,执行不同的where条件,很明显在Mysql下是可以直接通过case-when来写,但是oracle的case-when则不行,同样的sql修改成oracl的语法就会报错,不支持这种方式。但是如果真的存在这种业务场景,我们可以迂回一下,多走一步来实现这种场景,达到同样的目的。

    1. MySQL数据库
      --Mysql支持这种写法,可以根据关键字来执行不同的条件
      --可以理解case-when函数在Mysql下是可以返回直接执行的表达式
      
      SELECT * FROM test_table WHERE 
      CASE col_c 
        WHEN '>' THEN col_a > col_b
        WHEN '>=' THEN col_a >= col_b
        WHEN '<' THEN col_a < col_b
        WHEN '<=' THEN col_a <= col_b
        WHEN '=' THEN col_a = col_b
      END

       

    2. Oracle
      --Orale数据库的case-when函数则不能返回直接执行的表达式
      --但是我们可以转个弯,在select关键字后,将关键字对应的
      --表达式的计算结果值存为临时列,然后将结果集当一张临时
      --表,在根据where条件去过滤数据
      select col_a, col_b, col_c from (
      select 
       col_a, col_b, col_c,
       (case when (col_c = '>' and (col_a - col_b) > 0) then 1  
          when (col_c = '>=' and (col_a - col_b) >= 0) then 1  
          when (col_c = '=' and (col_a - col_b) = 0) then 1  
          when (col_c = '<' and (col_a - col_b) < 0) then 1  
          when (col_c = '<=' and (col_a - col_b) <= 0) then 1
          else 0 
       end) as temp
      from test_table )
      where temp = 1
      

       

    展开全文
  • http://www.cnblogs.com/rwxwsblog/p/4512061.htmlhttps://www.cnblogs.com/clphp/p/6256207.htmlCase具有两种...--简单Case函数CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女'ELSE '其他' END--Case搜索函数CASE ...

    http://www.cnblogs.com/rwxwsblog/p/4512061.html

    https://www.cnblogs.com/clphp/p/6256207.html

    Case具有两种格式。简单Case函数和Case搜索函数。

    --简单Case函数

    CASE sex

    WHEN '1' THEN '男'

    WHEN '2' THEN '女'

    ELSE '其他' END

    --Case搜索函数

    CASE WHEN sex = '1' THEN '男'

    WHEN sex = '2' THEN '女'

    ELSE '其他' END

    这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。

    还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。

    --比如说,下面这段SQL,你永远无法得到“第二类”这个结果

    CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'

    WHEN col_1 IN ('a')       THEN '第二类'

    ELSE'其他' END

    ===============

    update ffmpeg_agent_node set remark = case when isnull(remark) then 'docker' else concat(remark, '123') end where name = '10.77.40.194';

    mysql> select * from ffmpeg_cmd_template;

    +----+----------------------+------------------------+

    | id | name | content |

    +----+----------------------+------------------------+

    | 1 | ffmpeg_path | /data/LCMS/v1/ffmpeg |

    | 2 | ffserver_conf_folder | /data/LCMS/conf |

    | 3 | ffserver_path | /data/LCMS/v1/ffserver |

    | 4 | ffmpeg_log_folder | /data/LCMS/log |

    | 5 | ffmpeg_cmd_folder | /data/LCMS/cmd |

    | 6 | ffserver_log_folder | /data/LCMS/log |

    | 7 | ffprobe_path | /data/LCMS/v1/ffprobe |

    | 8 | ffserver_ffm_folder | /data/LCMS/ffm |

    | 9 | ffmpeg_stat_folder | /data/LCMS/log |

    +----+----------------------+------------------------+

    9 rows in set (0.00 sec)

    update ffmpeg_cmd_template

    set content = (

    case content  when '/data/LCMS/v3/ffmpeg' then '/data/LCMS/v4/ffmpeg'

    when '/data/LCMS/v3/ffserver' then '/data/LCMS/v4/ffserver'

    when '/data/LCMS/v3/ffprobe' then '/data/LCMS/v4/ffprobe' end)

    where name in ('ffmpeg_path', 'ffserver_path', 'ffprobe_path');    //只更新这几个name的值; 不带where的话,所有其他的记录的content会被置空

    http://database.51cto.com/art/200903/113939_all.htm

    3. REPLACE语句

    我们在使用数据库时可能会经常遇到这种情况。如果一个表在一个字段上建立了唯一索引,当我们再向这个表中使用已经存在的键值插入一条记录,那将会抛出一个主键冲突的错误。当然,我们可能想用新记录的值来覆盖原来的记录值。如果使用传统的做法,必须先使用 DELETE语句删除原先的记录,然后再使用INSERT插入新的记录。而在MySQL中为我们提供了一种新的解决方案,这就是REPLACE语句。使用 REPLACE插入一条记录时,如果不重复,REPLACE就和INSERT的功能一样,如果有重复记录,REPLACE就使用新记录的值来替换原来的记录值。

    使用REPLACE的最大好处就是可以将DELETE和INSERT合二为一,形成一个原子操作。这样就可以不必考虑在同时使用DELETE和INSERT时添加事务等复杂操作了。

    在使用REPLACE时,表中必须有唯一索引,而且这个索引所在的字段不能允许空值,否则REPLACE就和INSERT完全一样的。

    在执行REPLACE后,系统返回了所影响的行数,如果返回1,说明在表中并没有重复的记录,如果返回2,说明有一条重复记录,系统自动先调用了 DELETE删除这条记录,然后再记录用INSERT来插入这条记录。如果返回的值大于2,那说明有多个唯一索引,有多条记录被删除和插入。

    REPLACE的语法和INSERT非常的相似,如下面的REPLACE语句是插入或更新一条记录。

    REPLACE INTO users (id,name,age) VALUES(123, ‘赵本山’, 50);

    插入多条记录:

    REPLACE INTO users(id, name, age)

    VALUES(123, ‘赵本山’, 50), (134,’Mary’,15);

    REPLACE也可以使用SET语句

    REPLACE INTO users SET id = 123, name = ‘赵本山’, age = 50;

    上面曾提到REPLACE可能影响3条以上的记录,这是因为在表中有超过一个的唯一索引。在这种情况下,REPLACE将考虑每一个唯一索引,并对每一 个索引对应的重复记录都删除,然后插入这条新记录。

    假设有一个table1表,有3个字段a, b, c。它们都有一个唯一索引。

    CREATE TABLE table1(a INT NOT NULL UNIQUE,

    b INT NOT NULL UNIQUE,

    c INT NOT NULL UNIQUE);

    假设table1中已经有了3条记录

    a b c

    1 1 1

    2 2 2

    3 3 3

    下面我们使用REPLACE语句向table1中插入一条记录。

    REPLACE INTO table1(a, b, c) VALUES(1,2,3);

    返回的结果如下

    Query OK, 4 rows affected (0.00 sec)

    在table1中的记录如下

    a b c

    1 2 3

    我们可以看到,REPLACE将原先的3条记录都删除了,然后将(1, 2, 3)插入。

    展开全文
  • mysql case when where用法
  • 本文通过实例代码给大家介绍了Mybatis choose when用法,需要的的朋友参考下吧
  • where 后面使用 case when

    2021-10-08 21:12:56
    SELECT *FROM student WHERE 1 = 1AND teacher_one = ( CASE WHEN(LOCATE(',', teacher_one) > 0) THEN 'SC' ELSE 'S1C' END ) ; 或者 SELECT *FROM student WHERE 1 = 1AND ( CASE WHEN(LOCATE(',', teacher_...
  • CASE When用法

    2021-12-28 16:02:39
    1.1、用法一case when搜索函数 数据库查询结果是womanman,转为男女 SELECT CASE WHEN SEX = 'WOMAN' THEN '女' WHEN SEX = 'MAN' THEN '男' END FROM T_SYS_USER 注:给转换后的列起别名: CASE WHEN...
  • mybatis中case when用法以及@Param用法

    千次阅读 2021-04-15 22:30:36
    select d.tools_name, null as sum,null as num,dtp.specs,dtp.type, ...count( case when state =0 then 'state' end ) as 在库 , count(case when state =1 then 'state' end) 借出 , count(case when state =2 .
  • mysql case when 语句 放在 where 条件前,条件后的用法 case when 放在 where 语句之前,作为一列数据的过滤 case when 放在 where 语句之后 转载
  • 主要介绍了sql学习之CASE WHEN THEN ELSE END的用法,需要的朋友可以参考下
  • sql之case when用法详解

    2021-04-21 12:45:17
    简单CASE WHEN函数只能应对一些简单的业务场景,而CASE WHEN条件表达式的写法则更加灵活。CASE WHEN条件表达式函数:类似JAVA中的IF ELSE语句。简单CASE WHEN函数:CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END...
  • SQL中case when用法

    千次阅读 2019-09-26 08:54:06
    一、case when then else end的用法 (1)基本用法 case when 条件1 then 条件成立的内容 when 条件2 then 条件成立执行的内容 else 其他条件 end (2)在update更新中使用 UPDATE TABLE SET 字段 1 = CASE ...
  • 例,有如下更新条件工资5000以上的职员,工资减少10%工资在2000到4600之间的职员,工资增加15%很容易考虑的是选择执行两次UPDATE语句,如下所示--条件1UPDATE PersonnelSET salary = salary * 0.9WHERE salary >...
  • Mybatis CASE WHEN用法

    千次阅读 2022-04-27 11:34:08
    Mybatis CASE WHEN用法 Case具有两种格式。简单Case函数Case搜索函数。 简单Case函数 CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END –Case搜索函数 CASE WHEN sex = ‘1’ THEN ...
  • SQL之CASE WHEN用法详解

    万次阅读 多人点赞 2018-08-30 14:43:02
    简单CASE WHEN函数: CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END CASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END 等同于,使用CASE WHEN条件表达式...
  • MySQL在where后面使用case when

    万次阅读 2018-05-15 09:24:42
    在MySQL中,在where后面使用case when的说明 报错语句 select * from A, B where &amp;amp;amp;amp;lt;font color=red &amp;amp;amp;amp;gt;B.name in&amp;amp;amp;amp;lt;/font&amp;amp;amp;amp...
  • ORACLE之case when用法

    千次阅读 2020-04-13 09:26:31
    Oracle中case when用法 case when 表达式是一个通用条件的表达式,可以在表达式有效的任何位置使用。 用法如下: CASE WHEN condition THEN result [ WHEN condition THEN result ] … [ ELSE result ] END ...
  • 1.CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...2.CASE WHEN 在语句中不同位置的用法 SELECT中使用 CASE WHEN 用法 SELECT grade, C.
  • Hive case when 用法

    千次阅读 2019-11-25 16:02:53
    when coalesce(keya,'')<>'' then keya --then后面切勿带逗号,不然报错 when coalesce(par,'')<> '' and par like '%keya=%' and coalesce(str_to_map(par, ',', '=')['keya'],'')<>'' t...
  • oracle where 后使用case when

    千次阅读 2020-05-09 16:57:08
    SELECT * FROM A WHERE ( CASE WHEN PSTYP = '9' THEN POSID1 WHEN PSTYP = '0' THEN POSID2 END ) = '1' DECODE(列名, 值1, 返回值1,值2,返回值2,默认值)
  • Postgresql中(case、when)的用法

    万次阅读 2020-06-30 09:36:25
    1.case when ( case when substr(starttime::varchar,0,5)='2020' then '2020年' when substr(starttime::varchar,0,5)='2019' then '2019年' when substr(starttime::varchar,0,5)='2018' then '2018年' when ...
  • where 条件 in 判断语句中使用case when

    千次阅读 2020-09-25 16:30:51
    case when 一般用在 select 后面或者where条件的=后面,如: select case when '${unit}'='单' then order_num else quantity_num from a where project = case when '${type}'='T1' then 'P1' else 'P2' 如果...
  • SQL case_when用法

    2014-03-30 01:11:23
    本文档介绍了SQL中case...when用法
  • Case具有两种格式:简单Case函数Case搜索函数。 一:简单Case函数 case sex when '1' then '男' when '2' then '女' else '其他' end 二:Case搜索函数 case when sex = '1' then '男' when sex = '2' ...
  • Case具有两种格式:简单Case函数Case搜索函数。 1.简单Case函数 case sex when '1' then '男' when '2' then '女' else '其他' end 2.Case搜索函数 case when sex = '1' then '男' when sex = '2' ...
  • phase ON loan_phase.loanId = loan.loanId WHERE (CASE loan.status when 520 then 1=1 else 'loan_phase.phaseNumber=loan.repayedTermCount+1' end) AND loan.borrowerId = 100588 AND ( loan. STATUS = 500 OR ...
  • where子句中使用case when函数

    千次阅读 2018-12-18 23:57:50
    CASE WHEN 其实相当于产生了一个列,最后WHERE 再按那个列来限定 SELECT * AS A FROM TB WHERE CASE WHEN 1=1 THEN 1 ELSE 0 END =1 等价于 SELECT * FROM (SELECT * ,CASE WHEN 1=1 THEN 1 ELSE 0 END AS A ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,536
精华内容 21,814
关键字:

where和when的用法