oracle常用函数-decode

Decode函数在实际开发中非常的有用,而且功能比较强大,与其他函数结合,能让很多的工作变得简单;

DECODE(字段,
条件1,
结果值1, 
条件2,
结果值2, …默认值);

该函数的含义如下:

IF 条件=值1 THEN

RETURN(翻译值1)

ELSIF 条件=值2 THEN

RETURN(翻译值2)

......

ELSIF 条件=值n THEN

RETURN(翻译值n)

ELSE

RETURN(缺省值)

END IF

比较常见的一些用法:

1、比较大小

select decode(sign(变量1-变量2),-1,变量1,变量2)
from dual; --取较小值

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

例如:

select decode(sign(10-20),-1,10,20) from dual;

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

2、生成固定位数的序列号

我们看我们的水电煤等各种单子,经常有类似这种 2013000000000004这种固定长度的序列,我们可以结合Lpad函数,使主键的值自动加1并在前面补0;

select ‘2013‘ || LPAD(decode(count(ID),0,1,max(to_number(ID)+1)),12,‘0‘)
记录编号 from FFM83

FFM83 是一张做测试的表,ID是它的流水ID,有3条数据;

注意:这种写法虽然简单,但是如果用户多,在高并发情况下,可能会生成同样的序列号;

如果在高并发的情况下,可以参考下面这种写法:

select ‘2013‘ || LPAD(SEQ_ FFM83.NEXTVAL,12,‘0‘)
记录编号 from FFM83

SEQ_ FFM83是和FFM83表对应的一个SEQUENCE

3、简化多个条件的查询

比如我要查询男、女生的数量分别是多少?

通常我们这么写:

select count(*) from 表 where
性别=男;

select count(*) from 表 where
性别=女;

这样至少要查询2次,如果有更加多的选择的话,那么数据库的访问量会更加多;

用decode呢,只需要一句话

select sum(decode(sex,‘男‘,1,0)),sum(decode(sex,‘女‘,1,0))
from ffm83

ffm83 表中有一个sex字段,直接放了汉字的男女属性;

4、在Order by中使用Decode对指定字段进行排序

按照计算机,数学专业进行排序

例:

select * from ffm83 order by decode(subject, ‘计算机‘, 1, ‘数学‘,
2,10);

运行结果为:

女    1     
计算机    2013/1/4

男    2    
数学       2013/3/13

女    3    
数学       2013/3/18

注意:在大数据量的排序中,尽量不要使用这种方式,数据库开销非常大;

5、将竖表转横表

我们要统计2013年上半年每个月有多少人,最好直接拉出来一张类似报表的样子。如果用常规的方法,会比较麻烦,用DECODE就会相对简单

SELECT SUM(DECODE(TO_CHAR(DT, ‘MM‘), ‘01‘, 1,0)) AS "1月"

, SUM(DECODE(TO_CHAR(DT, ‘MM‘),‘02‘, 1,0)) AS "2月"

, SUM(DECODE(TO_CHAR(DT, ‘MM‘),‘03‘, 1,0)) AS "3月"

, SUM(DECODE(TO_CHAR(DT, ‘MM‘),‘04‘, 1,0)) AS "4月"

, SUM(DECODE(TO_CHAR(DT, ‘MM‘),‘05‘, 1,0)) AS "5月"

, SUM(DECODE(TO_CHAR(DT, ‘MM‘),‘06‘, 1,0)) AS "6月"

FROM FFM83;

运行结果如下:

1      0     2     0     0     0

备注:

表FF83的结构:

create table FFM83

(

SEX     VARCHAR2(2),

ID      INTEGER,

SUBJECT VARCHAR2(32),

DT      DATE

);

表中的数据为:

女    1     
计算机    2013/1/4

男    2    
数学       2013/3/13

女    3    
数学       2013/3/18

时间: 2024-10-29 04:37:38

oracle常用函数-decode的相关文章

Oracle常用函数

前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使用: 往emp表中插入一条记录: SQL> insert into emp values(1234,'LIZELU','BOSS',1234,'1980-12-06',10000.0,0,30); insert into emp values(1234,'LIZELU','BOSS',1234,'1

oracle常用函数(1)

1.返回与指定的字符对应的十进制数 select ascii('A') A,ascii('z') a,ascii('12') 一打,ascii(' ') kg from dual; 2.返回与指定十进制对应的字符 select chr(65) A,chr(122) z from dual; 3.连接两个字符串 select concat('熊大','熊二') constr from dual;--熊大熊二 4.将第一个字符变大写并返回字符串 select initcap('boat') uppe

【Oracle】详解Oracle常用函数

Oracle SQL 提供了用于执行特定操作的专用函数.这些函数大大增强了 SQL 语言的功能.函数可以接受零个或者多个输入参数,并返回一个输出结果. Oracle 数据库中主要使用两种类型的函数: 1.  单行函数:对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果, 比如:MOD(x,y)返回 x 除以 y 的余数(x 和 y 可以是两个整数,也可以是表中的整 数列).常用的单行函数有: Ø  字符函数:对字符串操作. Ø  数字函数:对数字进行计算,返回一个数字. Ø  转换函

oracle常用函数(2)

1.TRIM([ { { LEADING | TRAILING | BOTH }[ trim_character ]| trim_character} FROM ]trim_source) 函数 参数:leading   如果指定leading参数,oracle数据库将去除任何等于trim_character的开头字符. 参数:trailing  如果指定traling参数,oracle将去除任何等于trim_character的结尾字符. 参数:both  如果指定了both参数或者三个参数都

Oracle常用函数及其用法

01.入门Oracle 本章目标: 掌握oracle安装.启动和关闭 基本管理以及常用工具 简单备份和恢复 熟练使用sql,掌握oracle常用对象 掌握数据库设计和优化基本方法 http://jingyan.baidu.com/article/5d6edee228308899eadeec3f.html oracle数据库:一系列物理文件的集合 一个实例是对应一个数据库,但是在12c中(c代表云)RAC集群,可以多个实例对应一个数据库 03.SQL编程 1.oracle中between and

十、oracle 常用函数

一.字符函数字符函数是oracle中最常用的函数,我们来看看有哪些字符函数:lower(char):将字符串转化为小写的格式.upper(char):将字符串转化为大写的格式.length(char):返回字符串的长度.substr(char, m, n):截取字符串的子串,n代表取n个字符的意思,不是代表取到第n个replace(char1, search_string, replace_string)instr(C1,C2,I,J) -->判断某字符或字符串是否存在,存在返回出现的位置的索引

oracle常用函数及示例

学习oracle也有一段时间了,发现oracle中的函数好多,对于做后台的程序猿来说,大把大把的时间还要学习很多其他的新东西,再把这些函数也都记住是不太现实的,所以总结了一下oracle中的一些常用函数及示例,一是为了和大家分享,二是可以在以后工作中忘记了随时查阅.废话不多说,下面直接上函数. 一.单行函数 只处理单个行,并且为每行返回一个结果. 1.字符函数 (1)concat(str1,str2)字符串拼接函数 select concat('Hello ','World') from dua

oracle 常用函数汇总

一.字符函数字符函数是oracle中最常用的函数,我们来看看有哪些字符函数:lower(char):将字符串转化为小写的格式.upper(char):将字符串转化为大写的格式.length(char):返回字符串的长度.substr(char, m, n):截取字符串的子串,n代表取n个字符的意思,不是代表取到第n个replace(char1, search_string, replace_string)instr(C1,C2,I,J) -->判断某字符或字符串是否存在,存在返回出现的位置的索引

mysql与oracle常用函数及数据类型对比

最近在转一个原来使用oracle,打算改为mysql的系统,有些常用的oracle函数的mysql实现顺便整理了下,主要是系统中涉及到的(其实原来是专门整理过一个详细doc的,只是每次找word麻烦). 特性 oracle mysql 字符串转日期 to_date str_to_date 日期类型 date 公元前4712年1月1日至公元9999年12月31日 datetime:取值范围:1000-01-01 00:00:00 到 9999-12-31 23:59:59 timestamp:取值