度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1002|回复: 3
打印 上一主题 下一主题

[分享] Oracle判断语句集合

[复制链接]

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
跳转到指定楼层
楼主
发表于 2020-5-5 17:43:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

SELECT decode(sign(to_date('2008-05-01', 'yyyy-MM-dd') -
                   to_date('2008-03-01', 'yyyy-MM-dd')),
              1,
              to_date('2008-05-02', 'yyyy-MM-dd'),
              to_date('2008-03-02', 'yyyy-MM-dd'))
  FROM dual

--decode只支持比较值的相等和不相等,所以用sign(正数返回1,否则0)和1比较.

decode(floor(a/b),0,a,b)
简单的,如果a <b那么floor(a/b)=0
用decode判断,如果=0则返回a,否则,返回b


用case...when

select case
when
to_date('2008-05-01','yyyy-MM-dd')>=to_date('2008-03-01','yyyy-MM-dd')
then
to_date('2008-05-01','yyyy-MM-dd')
else
to_date('2008-03-01','yyyy-MM-dd')
end
from dual

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

decode用法:

例如 select count(*) from news

我们统计NEWS中的新闻条数,如果大于1000 的话就提示大于限制了.

这样 select decode(count(*),1000,'己经超出限制',limit)

这样limit 输出的就为'己经超出限制'这个字符串.

我们还可以用这个判断大小

a=10,变量b=20

则sign(a-b)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。

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

decode(sign(a-b),-1,a,b)

如果a<b的话,就输出A的值
-----------------------------------------------------

decode函数说明:
decode函数可以将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值。
函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式。当然,如果未能与任何一个实参序偶匹配成功,则函数也有默认的返回值。区别于SQL的其它函数,DECODE函数还能识别和操作空值。

如果应用中没有建立代码表,使用docode函数进行key–>value的转换是一种不错的替代方案,只是为应用的后期维护带来麻烦。

语法如下:
DECODE(control_value,value1,result1[,value2,result2…][,default_result]);
参数说明:
control _value
试图处理的数值。可以是数据库中表的某一列,DECODE函数将该数值与后面的一系列的偶序相比较,以决定返回值。
value1
是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。对应一个空的返回值,可以使用关键字NULL于之对应
result1
是一组成序偶的结果值。
default_result
未能与任何一个值匹配时,函数返回的默认值。
示例:
首先创建一张sale表,并插入一些测试数据:
create table class(id char(2),name varchar2(50), valid_flag char(1));
insert into class values('01','语文','Y');
insert into class values('02','数学','Y');
insert into class values('03','外语','N');
insert into class values('04','历史');

首先看一下decode函数的基本用法:
select id, name, decode(valid_flag, 'Y', '有效', 'N', '无效','未设置') from class;

ID NAME                                               DECODE(VALID_FLAG,'Y','有效','
-- -------------------------------------------------- ------------------------------
01 语文                                               有效
02 数学                                               有效
03 外语                                               无效
04 历史                                               未设置

说明:
当valid_flag为’Y'时,则返回’有效’;
当month为’N'时,则返回’无效’;
其他则返回’未设置’。
以上的sql语句可以通过case实现:
select id, name, case valid_flag
                 when 'Y' then '有效'
                 when 'N' then '无效'
                 else '未设置' end
from class;

由以上sql语句可以看出,使用decode函数要简洁的多。
另外,还可以在Order by中使用decode:
例:表table_subject,有subject_name列。要求按照:语、数、外的顺序进行排序。这时,就可以非常轻松的使用Decode完成要求了。
select * from table_subject order by decode(subject_name, ‘语文’, 1, ‘数学’, 2, , ‘外语’,3)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
沙发
 楼主| 发表于 2020-5-5 17:47:03 | 只看该作者
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
板凳
发表于 2020-5-6 14:01:38 | 只看该作者
回复 支持 反对

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
地板
 楼主| 发表于 2020-5-6 17:44:17 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-17 01:11 , Processed in 0.199751 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表