oracle中的条件语句
oracle中case when then及decode用法
一.case … when … then 语法:
– 写法一:
case(条件)
when 值1 then 返回值1
when 值2 then 返回值2
else 缺省值 – 写法二:
case when 条件1 then 返回值1
when 条件2 then 返回值2
else 缺省值
end; 案例1:
-- 如果部门编号为10的,显示为dept10
-- 如果部门编号为20的,显示为dept20
-- 如果部门编号为30的,显示为dept30
-- 否则显示为other
-- 这一列查询的结果,列名显示为 department 使用
写法一:
select ename,
sal,
case deptno
when 10 then
'dept10'
when 20 then
'dept20'
when 30 then
'dept30'
else
'other'
end department
from emp 写法二:
select ename,
sal,
case
when deptno = 10 then
'dept10'
when deptno = 20 then
'dept20'
when deptno = 30 then
'dept30'
else
'other'
end department
from emp 在这个例子中条件都是等值,结果是一样的。
如果是不等值的或是有多个表达式,就只能用第二种了,比如:
select ename,sal,
case when deptno= 10 or deptno = 20 or deptno = 30 then 'dept'||deptno end dept
from emp; select ename,sal,
case when deptno<=20 then 'dept'||deptno end dept
from emp; select ename,
sal,
case
when sal > 0 and sal <= 1500 then
'level1'
when sal > 1500 and sal <= 2500 then
'level2'
when sal > 2500 and sal <= 4500 then
'level3'
else
'level4'
end sal_level
from emp
order by sal desc; 二.decode函数:
decode(条件,值1,返回值1,值2,返回值2,…….,缺省值)
使用decode函数来实现案例1:
select ename,
sal,
decode(deptno, 10, 'dept10', 20, 'dept20', 30, 'dept30', 'other') department
from emp 查出来的结果和上面用case when一样,但这句看起来简洁得多了 decode()函数的延伸用法:
1.与sign函数联用比较大小:
--get arg1与arg2的较小值
语法:select decode(sign(arg1-arg2),-1,arg1,arg2) from dual;
实例:select decode(sign(3-5),1,3,5) from dual --5
注:sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1 一个Update语句:把表中某个字段的值进行更改,这条语句是把值为“1”的都改成“8”,“0”改成“9”
update tablename set 字段名= decode(字段名,1,8,0,9) where 字段名 in (1, 0);
三、DECODE 与CASE WHEN 的比较
1.DECODE 只有Oracle 才有,其它数据库不支持;
2.CASE WHEN的用法, Oracle、SQL Server、 MySQL 都支持;
3.DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,CASE when可用于=,>=,<,<=,<>,is null,is not null 等的判断;
4.DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活;
5.另外,在decode中,null和null是相等的,但在case when中,只能用is null来判断
示例如下:
emp表中有一列comm,如果这列为null,则显示为0,否则,显示为原值:
--decode可以显示我们要求的结果
SQL> select ename,decode(comm,null,0,comm) comma from emp;
-- null没有转成0,仍然是null,不是我们要求的结果
SQL> select ename,(case comm when null then 0 else comm end) comm from emp;
--这样才可以成功将null显示为0
SQL> select ename,(case when comm is null then 0 else comm end) comm from emp;
oracle中的条件语句的更多相关文章
- js中的条件语句
//js中的条件语句 ; //example1 单分支语句 ){ console.log("你已经不年轻了!"); }else{ console.log("你依然很有活力 ...
- Mysql中的条件语句if、case
Mysql中的条件语句在我们对数据进行转换的时候比较有用,这样就不需要创建中转表. IF 函数 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> ...
- Oracle中分页查询语句
Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用.O ...
- java中的条件语句(if、if...else、多重if、嵌套if)
Java条件语句之 if 生活中,我们经常需要先做判断,然后才决定是否要做某件事情.例如,如果考试成绩大于 90 分,则奖励一个 IPHONE 5S .对于这种"需要先判断条件,条件满足后才 ...
- Oracle 中按条件过滤重复记录
在数据处理中,经常会遇到类似这样的情况:数据库中存在多条记录,其中某些字段值相同,其他字段值不同.实际的业务需要针对这样的情况,只保留一条数据,其他数据删除.如何做到呢?在sql中有top关键字相对容 ...
- 【Python】解析Python中的条件语句和循环语句
1.if语句 if语句有好几种格式,比如: if condition: statement 使用 if ... else ...: if condition: statement(1) else: s ...
- oracle中查看sql语句的执行计划
1.在pl/sql中打开cmd命令容器 2.在cmd命令窗口中输入:explain plan for select * from t; 3.查看sql语句的执行计划:select * from tab ...
- mybatis sql中的条件语句
1.mybatis判断是否为空或null <if test="type!=null and type!=''"> AND type = #{type} </if& ...
- [译]javascript中的条件语句
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
随机推荐
- 微信小程序上传Excel文本文件功能
问题: 在开发过程中会发现微信小程序有很多功能都还不能满足我们的需求,谁叫客户就是上帝呢,前几天小编遇到了这么个问题,就是用微信小程序上传文件,但是还以为微信带有这个模块,可是查了许久还是没有找到,只 ...
- linux rpm命令之查询包安装与否、包详细信息、包安装位置、文件属于哪个包、包依赖
查询这个包是否已安装rpm -q 包名rpm -qa-q 查询-a all 查询已安装软件包和未安装软件包详细信息 rpm -qi 包名rpm -qip 包全名-i 查询软件信息-p package, ...
- 单位换算 M、Mb、MB
硬盘单位和存储单位 硬盘单位 存储空间 K M G Kb Mb Gb 1k =1000 bytes 1m = 1000000 bytes 1g = 1000000000 bytes 1kb ...
- mysql 安装版
安装 1.MySQL的安装类型选择: 在“Choose Setup Type”对话框有“Typical”默认安装类型:“complete"完全安装类型:Custom自定义安装类型. 我们选择 ...
- 5maven工程莫名其妙只在项目名称那里有一个红叉
manven工程里面没有报错的地方,编译也没有问题,只是项目名称那里有一个红叉. 解决办法: 右击项目-->maven-->update project 注意: 这种方法有时可 ...
- 在技术胖博客上学习ES6遇到的坑和想法
第一节:ES6的开发环境搭建 坑1:全局安装babel-cli已经不被官方推荐,改为局部安装(cnpm install babel-cli --save-dev): 坑2:babel src/inde ...
- mac os maverick下安装nginx+php-fpm via homebrew
自己虽然平时爱折腾,却很少有记下来的习惯,除非碰到特别多问题的部署才会有冲动.今天看同事折腾git,在旁边看着他mac上的evernote满满的记了好几篇,全是技术相关的记录,忽然很感慨.过去解决了很 ...
- beautifulsoup之CSS选择器
BeautifulSoup支持大部分的CSS选择器,其语法为:向tag或soup对象的.select()方法中传入字符串参数,选择的结果以列表形式返回. tag.select("string ...
- Oracle v$session/v$sql 表
在本视图中,每一个连接到数据库实例中的 session都拥有一条记录.包括用户 session及后台进程如 DBWR, LGWR, arcchiver等等. V$SESSION中的常用列 V$SESS ...
- sql建JOB语句
declare job_id pls_integer; begin sys.dbms_job.submit(job => job_id, what => 'proc_AGTAWBSTATI ...