1. 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

如下:

select case when t.a = '2' then '是1' else '不是1' end A from AAA t

-------------------------------------------------------------------------------------------------------------------

  1. 一、DECODE ( )

    语法:decode(expr,search1,result1,

                                  search2,result2,

                                  ……

                                  search n,result n, default)

    解释:decode函数将expr值与各search值一个一个比对,若expr值等于search值oracle数据库返回其对应的result值;若没有匹配的search值,则返回default值;若函数中default值缺省则返回null。

    说明:

    1. search, result 和 default 值可以使表达式。oracle数据库使用short-circuit evaluation,简单点说就是按顺序先计算了search1的值跟expr比较,若不行则继续对search2执行一样的操作,一旦找到匹配的search值,则不再对后面的search值进行计算比对。

    2. 在比较之前,oracle自动将expr和每一个search值的数据类型转换成第一个search值的数据类型。同理也把所有result值的数据类型转换成第一个result值的数据类型。若第一个result值的数据类型为CHAR或第一个result值缺省,那么oracle就令返回值的数据类型为VARCHAR2。

    3.在decode函数中,oracle默认两个null值是相等的,若expr为null,则oracle返回search1的result为null。

    4.decode函数中包括expr,search , result 和 default 值在内,最多可包含255个参数。

    实例:

    SELECT product_id,

    DECODE (warehouse_id, 1, 'Southlake',

                          2, 'San Francisco', 

                          3, 'New Jersey', 

                          4, 'Seattle', 'Non domestic') "Location" 

    FROM inventories 

    WHERE product_id < 1775 

    ORDER BY product_id, "Location";

    延伸用法:

    1. 与sign函数联用比较大小:

    语法:select decode(sign(arg1-arg2),-1, arg1, arg2) from dual; --get arg1与arg2的较小值

    实例:select decode(sign(3-5),1 ,3, 5) from dual  

    注:sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

    2. 表、视图结构转化:

    基本思路:

    使用substrb函数实现对字段的判断,然后用decode函数对数据进行重新计算,并生成新的数据和构成新的表(table or view)。

  2.  

    二、CASE WHEN

    语法:

    SELECT     CASE           

                WHEN price IS NULL THEN 'Unpriced'           

                 WHEN price < 10 THEN 'Bargain'           

                 WHEN price BETWEEN 10 and 20 THEN 'Average'           

                 ELSE 'Gift to impress relatives'       

                END AS "Range",       

                Title   

     FROM titles   

     where   

         CASE           

                     WHEN price IS NULL THEN 'Unpriced'           

                     WHEN price < 10 THEN 'Bargain'           

                     WHEN price BETWEEN 10 and 20 THEN 'Average'           

                     ELSE 'Gift to impress relatives'     END in('Average','Bargain')  

     GROUP BY     CASE           

                     WHEN price IS NULL THEN 'Unpriced'           

                     WHEN price < 10 THEN 'Bargain'           

                     WHEN price BETWEEN 10 and 20 THEN 'Average'           

                     ELSE 'Gift to impress relatives'     END,       

                     Title   

     ORDER BY     CASE           

                     WHEN price IS NULL THEN 'Unpriced'           

                     WHEN price < 10 THEN 'Bargain'           

                     WHEN price BETWEEN 10 and 20 THEN 'Average'           

                     ELSE 'Gift to impress relatives'       

                     END,Title  

    解释:除了可以在select 中使用CASE 外,where 子句,group by 子句,order by 子句都可以使用

  3. 3

    三、比较

     1.DECODE 是Oracle特有的;

     2.CASE WHEN 是Oracle, SQL Server,MySQL 都可用;

     3.DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断;CASE可用于=,>=,<,<=,<>,is null,is not null 等的判断;

    4.DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活。

SQL --- Case when 的使用方法的更多相关文章

  1. SQL Case when 的使用方法(转)

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  2. 转:SQL Case when 的使用方法

      Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' EN ...

  3. 转:SQL Case when 的使用方法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  4. SQL Case when 的使用方法 (转)

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  5. Case when 的使用方法

    SQL Case when 的使用方法 Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THE ...

  6. SQL case when 的使用总结

    在网上看到一篇关于case when语句的博客,写得很好,我这里是摘录的,还有我的一些体会,原博客地址:SQL Case when 的使用方法. Case具有两种格式.简单Case函数和Case搜索函 ...

  7. 你真的会玩SQL吗?实用函数方法汇总

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  8. MySQL命令执行sql文件的两种方法

    MySQL命令执行sql文件的两种方法 摘要:和其他数据库一样,MySQL也提供了命令执行sql脚本文件,方便地进行数据库.表以及数据等各种操作.下面笔者讲解MySQL执行sql文件命令的两种方法,希 ...

  9. Error Code: 1064 – You have an error in your SQL syntax解决几个方法

    本文转自 http://www.anyiwa.com/?p=1066 Error Code: 1064 – You have an error in your SQL syntax解决几个方法 十一月 ...

随机推荐

  1. Android Weekly Notes Issue #224

    Android Weekly Issue #224 September 25th, 2016 Android Weekly Issue #224 本期内容包括: Google Play的pre-lau ...

  2. iOS:GCD理解1(同步-异步、串行-并行)

    1.并行-异步(ST1与ST2抢占资源) 1-1).获取 并行(全局)队列 ,DISPATCH_QUEUE_PRIORITY_DEFAULT 为默认优先级. dispatch_queue_t queu ...

  3. Android 手机卫士--获取联系人信息并显示与回显

    前面的文章已经实现相关的布局,本文接着进行相关的功能实现 本文地址:http://www.cnblogs.com/wuyudong/p/5951794.html,转载请注明出处. 读取系统联系人 当点 ...

  4. Eclipse for Java EE软件操作集锦(二)

    看本文章之前请确保已经了解eclipse建立web工程,如果有疑问请查看本系列文章第一篇 eclipse软件操作集锦(一) 1.我们添加一个servlet 配置一下web.xml测试一下是否能正常显示 ...

  5. Spring下如何配置bean

    本次讲述项目背景: 创建Service类,Service下用到dao类.通过在Spring中配置bean,实现在项目启动时,自动加载这个类 本次只讲述配置bean的注意事项,故只给出简单实例: 创建S ...

  6. 原创 C++之常量(一)

    1概述 一个C++程序就是一系列数据与操作的集合.当一个C++程序开始运行的时候,与该程序相关的数据就会被加载到内存中.当数据与内存发生关联的时候,这些数据就会具有如下的特性: 数据在内存中的地址.这 ...

  7. VMware的三种网络连接方式区别

    关于VMware的三种网络连接方式,NAT,Bridged,Host-Only ,在刚接触的时候通常会遇到主机Ping不通虚拟机而虚拟机能Ping得通主机:主机与虚拟机互不相通等等网络问题.本文就这三 ...

  8. SQL*Plus环境下创建PLUSTRACE角色

    普通用户在SQL*Plus中开启AUTOTRACE报告时,遇到SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is ...

  9. python-基本数据类型

    /int整数/ 如: 18.73.84 每一个整数都具备如下功能: class int(object): """ int(x=0) -> int or long i ...

  10. Android LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)的参数理解

    方法inflate(int resource, ViewGroup root, boolean attachToRoot) 中 第一个参数传入布局的资源ID,生成fragment视图,第二个参数是视图 ...