DECODE,case when
来源:互联网 发布:怎么开淘宝店容易赚钱 编辑:程序博客网 时间:2024/05/20 02:29
一、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)。
二、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 子句都可以使用
三、比较
1.DECODE 是Oracle特有的;
2.CASE WHEN 是Oracle, SQL Server,MySQL 都可用;
3.DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断;CASE可用于=,>=,<,<=,<>,is null,is not null 等的判断;
4.DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活。
- case when 与decode
- DECODE,case when
- case when decode
- DECODE ROUND case when
- decode和case when
- decode和case when区别?
- case when和decode比较
- case when 与 decode 用法
- 行转列之decode、case when
- 等同decode函数的case when 语句
- Oracle中的CASE When和Decode比较
- 奇偶数、课程成绩 Decode、when case
- oracle 函数sign()、ABS()、decode()、case when、
- Oracle decode case when 行转列 分组查询
- DECODE函数和CASE WHEN 比较
- Oracle的DECODE()和CASE WHEN
- 行转列,列转行,decode,case... when ... then ..
- DECODE函数和CASE WHEN 比较
- LeetCode之Minimum Path Sum
- Spring(七)用@Resource和@Autowired注解完成属性装配及自动装配
- ngx_array可变数组
- openssl编程之客户端
- charles工具抓包教程(http跟https)
- DECODE,case when
- BZOJ 2038 小Z的袜子(hose) (莫队离线)
- HDU 4512 吉哥系列故事——完美队形I
- C++ cin对象
- C++ 智能指针详解
- zoj1110 Dick and Jane
- Hadoop的Python框架指南
- tomcat 配置下载链接
- POJ 2457--Part Acquisition 【spfa最短路 + STL路径输出】