精华内容
下载资源
问答
  • Oracle SQL case when 表达式

    千次阅读 2017-06-01 15:03:17
    Oracle SQL case when 表达式


    以上截图来自官方文档:

    Oracle® Database SQL Language Reference
    11g Release 2 (11.2)


    Case表达式处理的是逻辑判断。基于行数据的逻辑判断,不需要去调用存储过程。

            在简单case表达式中,WHEN comparison_expr THEN return_expr是成对出现的,oracle就是从左往右搜索判断找到第一个comparison_expr和expr相等的,然后返回return_expr。如果没有WHEN ... THEN中的comparison_expr和expr相等,就返回else_expr。否则返回null.

            在搜索case表达式中,oracle从左到右搜索判断直到找到第1个为true的表达式。然后返回return_expr。如果没有condition为true,返回ELSE指定的值。否则,返回null.

            oracle使用短路径搜索,只有在前1个不相等(简单case表达式)或者条件判断为false(搜索case表达式),才会进行下一个的判断匹配。

            在简单case表达式中,expr和comparison_expr必须要么是相同的数据类型(CHAR, VARCHAR2, NCHAR, or NVARCHAR2, NUMBER, BINARY_FLOAT, or BINARY_DOUBLE),或者是都是数字数据类型。如果表达式都是数字类型,oracle把所有的隐式转换到其中最高优先级的类型,返回值也是这种类型。

            对于简单case表达式和搜索case表达式,所有的return_exprs必须要么是相同的数据类型(CHAR, VARCHAR2, NCHAR, or NVARCHAR2, NUMBER, BINARY_FLOAT, or BINARY_DOUBLE),或者是都是数字数据类型。如果所有返回表达式都是数字类型,oracle把所有的隐式转换到其中最高优先级的类型,返回值也是这种类型。

            CASE表达式中的最大参数个数是65535。WHEN ... THEN算2个参数,ELSE ...算1个参数,case ... 算一个参数。


    简单case表达式(只能判断是否相等,在需求简单时候很简洁,当然你也可以数值相减然后用sign函数间接判断数值大小)

    SELECT cust_last_name,
       CASE credit_limit WHEN 100 THEN 'Low'
       WHEN 5000 THEN 'High'
       ELSE 'Medium' END AS credit
       FROM customers
       ORDER BY cust_last_name, credit;
    
    CUST_LAST_NAME       CREDIT
    -------------------- ------
    Adjani               Medium
    Adjani               Medium
    Alexander            Medium
    Alexander            Medium
    Altman               High
    Altman               Medium
    . . .


    搜索case表达式(判断when后面的表达式是否为真,功能更加灵活强大)

    SELECT AVG(CASE WHEN e.salary > 2000 THEN e.salary
       ELSE 2000 END) "Average Salary" FROM employees e;
    
    Average Salary
    --------------
        6461.68224


    展开全文
  • oraclecase when函数

    千次阅读 2017-08-08 16:09:27
    case-when的格式: case when 'x' then 'xx' when 'xxx' then 'xxxx' else 'xxxxx' end case..when..then的意思,可以理解为: case 当某某条件(when ‘xx’) 则赋予什么值(then ‘xx’) 其中 when ....
    1. case-when的格式:

      case when 'x' then 'xx'
      when 'xxx' then 'xxxx'
      else 'xxxxx'
      end

      case..when..then的意思,可以理解为: case 当某某条件(when ‘xx’) 则赋予什么值(then ‘xx’)
      其中 when .. then .. 可以使用多次,表示有不同的多个条件的情况,最后以else结尾,表示排除了case..when条件的其他情况
    2. 使用实例
      1) 需要处理的情况
      这里写图片描述
      如图,里面的一个字段ACTION_TYPE, 是一串编码,一般都是数据字典里的编码,我们一眼无法看出其代表的意思,如果要知道其代表的意思,有一个办法就是去看数据字典,然后用case when来处理。
      2)实际处理
      这里写图片描述
      如上,我们使用了三次when来判断了三次,最后用else来赋予一次缺省值,等于一共加了4个条件,最后还可以取个别名 actionType,查到的结果就是自己判断处理后的数据了。
    展开全文
  • ORACLEcase when用法

    2020-04-13 09:26:31
    Oraclecase when的用法 case when 表达式是一个通用条件的表达式,可以在表达式有效的任何位置使用。 用法如下: CASE WHEN condition THEN result [ WHEN condition THEN result ] … [ ELSE result ] END ...

    Oracle中case when的用法
    case when 表达式是一个通用条件的表达式,可以在表达式有效的任何位置使用。
    用法如下:
    CASE
    WHEN condition THEN result
    [ WHEN condition THEN result ]

    [ ELSE result ]
    END
    condition:返回一个布尔结果的表达式。如果结果为false,则以相同的方式评估后续where子句。
    result :当关联条件为真时要返回的值
    ELSE result:如果没有条件,则CASE表达式的值是ELSE子句中的结果。 如果省略ELSE子句且没有条件匹配,则结果为null。
    例如:
    SELECT a, CASE WHEN a=1 THEN ‘one’
    WHEN a=2 THEN ‘two’
    ELSE ‘other’ END
    FROM test;

    结果如下:
    a | case
    —+——-
    1 | one
    2 | two
    3 | other

    上述只是简单的用法,有定义可以看出,有两点需要注意
    1.result表示关联条件为真时返回的值,所以无论有多少个when子句,其result都必须的同一个类型的值,因为一个关系型数据库字段只能有一种类型(含括else可能返回的结果)
    2.condition “如果为false,则以相同的方式评估后续where子句”即如果为真,就按照这种方式返回结果result,相当与是有先后顺序的

    例如 验证2:判断电话134********(以134开头)的号码归属运营商
    select case when substr(‘134********’,1,4) = ‘1349’ then ‘电信’ else ‘移动’ end

    由号段可知,以1349开头的电话号码为电信,但是134开头号码的移动,所以不能单纯的截取3位来判断,这就是先判断前四位,再判断前三位。利用了case when的先后顺序。

    拓展:判断号码归属地:
    select case when substr(a.tel,1,4) in (‘1703’,‘1705’,‘1706’,‘1440’) then ‘移动’
    when substr(a.tel,1,4) in (‘1704’,‘1707’,‘1708’,‘1709’) then ‘联通’
    when substr(a.tel,1,4) in (‘1410’,‘1700’,‘1701’,‘1702’,‘1349’) then ‘电信’
    when substr(a.tel,1,3)(‘134’,‘135’,‘136’,‘137’,‘138’,‘139’,‘150’,‘151’,‘152’,‘157’,‘158’,‘159’,‘182’,‘183’,‘184’,‘187’,‘188’,‘178’,‘147’,‘198’,‘148’) then ‘移动’
    when substr(a.tel,1,3) in (‘130’,‘131’,‘132’,‘155’,‘156’,‘185’,‘186’,‘176’,‘145’,‘171’,‘166’,‘146’) then ‘联通’
    when substr(a.tel,1,3) in (‘133’,‘153’,‘189’,‘180’,‘181’,‘177’,‘173’,‘149’,‘199’) then ‘电信’
    end as operator_type
    from tb_tel a

    展开全文
  • 最近大量用到了oracle的sql语句中的case when,闲下来就整理一下。 1.根据类别统计 假设现在有一组数据如下 其中,0表示单选题,1表示多选题,现在分别要统计单选题跟多选题的数目,就可以这么做啦 select...

    最近大量用到了oracle的sql语句中的case when,闲下来就整理一下。
    1.根据类别统计
    假设现在有一组数据如下
    这里写图片描述
    其中,0表示单选题,1表示多选题,现在分别要统计单选题跟多选题的数目,就可以这么做啦
    select sum(case t.type when 0 then 1 else 0 end), sum(case t.type when 1 then 1 else 0 end) from Question t;

    2.合并数据类型不同的两列(数字型跟字符串型)
    假设现在又有一组数据如下
    这里写图片描述
    假设支付宝里的余额跟微信里的余额是互补的,且支付宝余额是number型,微信余额是varchar型的,现在需要将两列合并,就可以这么这么来做啦
    select (case t.zfb
    when 0
    then ”
    else
    ”||t.zfb end)||t.wx
    from Table t;

    ”||t.zfb这个的意思就是把number型的字段转换成varchar型。
    结果就是两组余额的和啦。

    那个备注一下哈,上面的是两个单引号,左单‘和’右单。

    3.正则拆分取第一个字符串
    假设有一个字段data,值是aaa,bbb,ccc,现在只需要取第一个值,就可以用REGEXP_SUBSTR()这个函数
    select REGEXP_SUBSTR(t.data,’[^,]+’,1,1,’i’) as a from table t;
    这样就可以取到aaa啦,如果是拿最后一个值的话,就这么写
    select REGEXP_SUBSTR(t.data,’[^,]+’,1,3,’i’) as a from table t;

    4.case when里的like功能
    假如要用到case when又要用到like这样的功能,即如果字符串包含‘语文’就怎么怎么样,包含‘数学’就怎么怎么样,包含‘英语’就怎么怎么样,like是用于where中的,放在case when里面是无效的,可以用instr()这个函数来查找这些字符出现的位置,代替like的功能,这样写就好呐。
    case when instr(t.str,’语文’) > 0 then 0
    when instr(t.str,’语文’) > 0 then 1
    when instr(t.str,’语文’) > 0 then 2
    else 3 end
    另外在多表查询时,一开始我喜欢用in,在执行了一段时间后报出了ora-1几几几数字类型不正确的错误,分析了一下估计是in的括号里的数据太多的缘故,所以尽量不要用in,用关联查询就可以了。

    5.附加日期区间
    两个日期之间我喜欢这么写
    to_char(t.operate_time,’yyyymmdd’) between ‘20170203’ and ‘20170206’
    我发现别人是这么写的
    t.operate_time > to_date(‘20170203’, ‘yyyymmdd’)
    and t.operate_time < to_date(‘20170207’, ‘yyyymmdd’)
    请注意两种写法后面一个日期的写法,第二种写法加了一天,如果不加就会少一天,因为是小于嘛。
    写法都一样啦,借鉴一下

    展开全文
  • NULL 博文链接:https://vernonchen163.iteye.com/blog/1908053
  • oracle case when用法

    2014-04-23 13:33:07
    Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' ...
  • case a.if_adddrivinglicense when '是' then (b.typename || '/' || a.new_drivinglicens) else b.typename end 2、Case搜索函数 case when a.tempaddrnumb is null then null else '居住证' end 例: select ....
  • 本篇文章是对oracle case when 语句的用法进行了详细的分析介绍,需要的朋友参考下
  • Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' E
  • Oracle case when 详解

    千次阅读 2019-08-21 11:38:19
    文章目录1 概述2 示例: when 执行顺序3 ORA-06592: 执行 CASE 语句时未找到 CASE 1 概述 1. case when:条件判断语句 (1) 相当于其它语言中的 if else (2) 部分情况下,等同于 decode() 2. case when 表达式用两...
  • Oracle case when用法

    千次阅读 2014-01-16 14:44:58
     2、分支中WHEN 后跟条件,THEN为显示结果  3、ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加  4、END 后跟别名  CASE有两种表达式:  1. 简单CASE表达式
  • oracle case when 用法

    2016-05-05 15:47:34
    1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '...
  • Oracle 数据库 case when的使用

    千次阅读 2019-04-29 20:48:18
    我们在数据库进行查询的时候,有时候需要对数据进行...1.使用 case when ...then ..else..end等关联词 举例: 现在我判断,若第一列不是空,在插入的时候,取最大值的+1,否则我就自动设置一个数字。 select ...
  • ORACLECASE WHEN表达式

    千次阅读 2019-04-08 09:03:47
    CASE WHEN语句的一般用法,通过条件判断返回对应的值。 例:查询若部门号为 10, 则打印其工资的 1.1 倍, 20 号部门, 则打印其工资的 1.2 倍, 30 号部门打印其工资的 1.3 倍数 select last_name, department_id, ...
  • ORACLE关于case when语句

    千次阅读 2019-04-08 11:42:34
    大家好,下面我来讲解一下我初学oracle的见解,因为由于我之前曾学过SQL Server的原因,有了前面的基础铺垫... 其中,最好玩和最有用的是oracle里面的case when…then… else …end语句,刚开始学的时候还是懵懂懵懂...
  • oracle case when 函数

    2020-02-26 10:25:34
    oracle case when 函数 《PS:留下小赞赞,比心比心》 select case when length(nvl(null,''))=0 then 1 else 0 end from dual ;
  • Oracle CASE WHEN 用法介绍

    千次阅读 2019-08-29 10:52:51
    1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '...
  • oracle case when 使用

    2018-01-11 11:29:28
    Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' ...
  • Oracle数据库 case when then else end 有时从数据库中做查询判断时,会根据字段的值不同,查询出不同的结果,这时就需要用到 case when then else end了 具体用法如下: CASE sex WHEN '1' THEN '男' WHEN '2' ...
  • oracle case when like

    千次阅读 2018-01-25 11:40:18
    原来经常用到case A when then 最近做项目时遇到这样的需求:当...发现oracle 还有case when like 的写法,特总结如下 case   when class like '1%' then (select ....)  when class like '2%' then (select...)
  • Oraclecase when用法

    千次阅读 2017-08-08 17:09:14
    转载自:http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.htmlCASE WHEN 表达式有两种形式--简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE ...
  • oraclecase when关键字的使用

    千次阅读 2019-08-16 15:59:11
    场景:需要判断数据库中某条件下是否存在数据,如果存在,则显示1,否则显示2. ...解决方案:select case when 条件 then 1 else 2 end; 还可以给字段起别名:select case when 条件 then 1 else 2 end abc; ...
  • Oraclecase when 报错 字符集不匹配 在写报表的时候,发现case when报错字符集不匹配, 例子如下 case when v12.a30_委托方 = '内部结算' then '内部结算' else v12.a22_销售 root_cause: a22销售字段是...
  • Oraclecase when的用法

    2017-08-02 16:39:18
    CASE WHEN THEN WHEN THEN ELSE END 示例: select name, (case  when sex=‘1‘’ then ‘女生’ else ‘’男生 end)sex, (case when sex=‘1’ and country=‘中国‘’ then ‘中国女生...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,330
精华内容 20,932
关键字:

oraclewhen的case