1. decode()
此函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能。
含义:decode(表达式, 值1, 返回值1, 值2, 返回值2, ...值n, 返回值n, 缺省值)
IF 表达式的结果 = 值1
返回 (返回值1)
ELSE IF 表达式的结果 = 值2
返回 (返回值2)
......
ELSE IF 表达式的结果 = 值n
返回 (返回值n)
ELSE
返回 (默认值)
有点像是case when then else end 的用法,不过这个函数用起来更简单。
用法:
① 比较大小
-- 取较小值
select decode(sign(字段1 - 字段2), -1, 返回值1, 返回值2) from dual;
sign函数说明:取数字n的符号,大于0返回1,小于0返回-1,等于0返回0(n可以是表达式,(n-200))
② 字段格式化处理
select id, username, age, decode(sex,0,'男',1,'女') from users;
在此场景下使用decode函数,将字段'sex'存储的整型值赋值为对应的字符。
③ 行列转换
例:现有表student_score,表中数据如下:
序号 | 姓名 | 科目 | 成绩 |
1 | 宇峰 | 语文 | 96 |
2 | 宇峰 | 数学 | 86 |
3 | 宇峰 | 英语 | 76 |
执行SQL:select name, subject, score from student_score order by name; 获得如下数据: