oracle 常用函数
1.decode和case when
decode (a,'1','aaa','2','bbb','ccc')
就是if 字段a = 1 then aaa
else if a=2 then bbb
else ccc
case when a=1 then 'aaa'
when a='2' then 'bbb'
else 'ccc'
end
decode只能在oracle里面用,mysql不行,sqlplus不行,case when是可以在别的数据库里面用的
decode只能做相等判断,case when 可以做大于小于大于等于什么的那种判断,还有is null,is not null
case when 用在存储过程里面的时候end后面要加上case,就是 end case
2.concat 和||
concat只能连接两个,||能连接好多
concat(a,b)
concat('a','b')
a||b||c||d
有case when在select里面的时候不能直接用||或者是concat,要做一个子查询把结果先查出来再拼接
3.instr
instr(a,b,c,d)
a是要查的,b是查什么,c是从第几位开始查,d是查到第几个的时候返回
4.replace
replace(x,old,new)
把x里面的old换成new
5.substr
substr(x,start,length)
截取x,从start开始截取length位
6.length
length(x)
返回x的长度
7.ltrim,rtrim,trim
ltrim(a,'a')
去掉a字段左边的a,如果有连续的a就全都去掉
rtrim(a,'a')
去掉a字段右边的a,如果有连续的a就全都去掉
trim('a' from a)
去掉两边的a,如果有连续的a就全都去掉,一般用来去掉空格写法是trim(a),a是字段名
以上三个只能去除单个字符,比如想去掉字段a里面的字符串abc是不可以的,但想去掉字段a里面连续的aaaaa是可以的
8.merge into
MERGE INTO ABCD T1
USING (SELECT A,B,C FROM ABC WHERE D = '1' ) T2
ON (T1.A = T2.A)
WHEN MATCHED THEN
UPDATE SET T1.B = T2.B;
WHEN NOT MATCHD THEN
INSERT (A,B,C) VALUES (T1.A,T1.B,T1.C);
解释:on是两个表的关联条件,当满足on里面的条件时,执行update,不满足执行insert,inset里面的值要在using里面的select中查出来,否则提示字符无效
9.upper和lower
更改大小写
SELECT UPPER('AAAaaa') FROM DUAL;
会显示全是大写的A
SELECT LOWER('aaaAAA') FROM DUAL;
会显示全是小写的a
10.NVL
SELECT NVL(A,'000') FROM ABC
解释:当字段A里面有值就输出字段A本身的值,没有值时输出000
11.union 和union all
SELECT * FROM ABC UNION SELECT * FROM ABCD;
解释:将SELECT * FROM ABC 的结果和SELECT * FROM ABCD;的结果去重后拼接在一起输出
SELECT * FROM ABC UNION ALL SELECT * FROM ABCD;
解释:将SELECT * FROM ABC 的结果和SELECT * FROM ABCD;的结果直接拼接在一起输出
12.wm_concat
列转行函数
SELECT WM_CONCAT (D) FROM ABCD;
解释:将表abcd里面的字段d里面的所有值拼接在一起,成为一个行的形式
13.找到包含最大值和最小值的记录
SELECT CLIENT_SHORT,ACTUAL_BAL
FROM (
SELECT CLIENT_SHORT,
ACTUAL_BAL,
MAX(ACTUAL_BAL) OVER() MAX_BAL,
MIN(ACTUAL_BAL) OVER() MIN_BAL
FROM FSD.RB_ACCT) X
WHERE ACTUAL_BAL IN (MAX_BAL,MIN_BAL)
14.rank() / dense_rank() over(partiiton by .. order by ..)
rank() 是跳跃排序,有两个第一,接下来是第三
dense_rank()是连续排序,有两个第一,接下来是第二
partition by是按哪个字段分组,order by 是按哪个字段排序
15.