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. 长按TextField或TextView显示中文的粘贴复制

    首先要确保手机当前系统为中文,只需要在 plist 文件中添加 Localized resources can be mixed = YES 就行了

  2. 使用PullToRefresh插件实现ListView下拉刷新(Android Studio)

    下载PullToRefresh

  3. Scala访问修饰符(四)

    Scala 访问修饰符基本和Java的一样,分别有:private,protected,public. 如果没有指定访问修饰符符,默认情况下,Scala对象的访问级别都是 public. Scala ...

  4. Web系统性能测试术语简介

    并发用户 并发一般分为两种情况.一种是严格意义上的并发,即所有的用户在同一时刻做同一件事情或者操作.这种操作一般指做同一类型的业务,比如在信用卡审批业务中,一定数目的用户在同一时刻对已经完成的审批业务 ...

  5. linux基础:第三关课前考试题整理

    1.如何取得/etc/hosts 文件的权限对应的数字内容,如-rw-r--r-- 为 644, 要求使用命令取得644 这样的数字. [root@server ~]# stat /etc/hosts ...

  6. centos6.5无法访问网络

    1.在network Adapter选中,右侧是否是选中为NAT 2.打开网络和共享中心-->更改适配器设置,VMnet8和VMnet1是否是自动获取了IP,自动获取ip连接上后 3.右击本地连 ...

  7. java正则表达式

    java正则表达式 1.Java正则表达式的语法与示例:  http://baike.xsoftlab.net/view/207.html 2.Java 正则表达式:  http://www.runo ...

  8. 表单元素——checkbox样式美化

    一.背景 设计狮童鞋总是会设计各种高大上的效果图,比如下面这个土豪金的效果. 该图中“已阅读并同意相关服务条款”前面的复选框有一个金色的边框,打钩时是一个金色的对勾.接下来说说怎样实现该效果. 二.解 ...

  9. Hadoop 2.x

    Hadoop 2.x 生态系统及技术架构图 一.负责收集数据的工具:Sqoop(关系型数据导入Hadoop)Flume(日志数据导入Hadoop,支持数据源广泛)Kafka(支持数据源有限,但吞吐大) ...

  10. Linux 进程与线程五

    pthread_self函数 pthread_t pthread_self(void); 一般会成功,返回当前线程的ID 注意:在子线程中执行exit()函数会退出整个进程,一般使用pthread_e ...