1.decode函数码值转换
- decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
decode上else其他条件必须加上 - sign(value)结合decode方法
sign(value)函数会根据value的值为0,正数,负数,分别返回0,1,-1 - case when
oracle支持case when语句,相等的判断使用decode,涉及到不等使用casewhen语句
2.左右连接
- 左外连接
select * from t_A a left join t_B b on a.id = b.id;
select * from t_A a left outer join t_B b on a.id = b.id;
Select * from t_A a,t_B b where a.id=b.id(+); - 右外连接
select * from t_A a right join t_B b on a.id = b.id;
select * from t_A a right outer join t_B b on a.id = b.id;
select * from t_A a,t_B b where a.id(+)=b.id; - 全连接
select * from t_A a full join t_B b on a.id = b.id;
select * from t_A a full outer join t_B b on a.id = b.id; - 内连接
select * from t_A a,t_B b where a.id = b.id;
select * from t_A a join t_B b on a.id = b.id;
3.时间日期
- 时间转字符串
TO_NUMBER(TO_CHAR(AC01.Aac006,'yyyy'))>=1992
- 字符串转时间
select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh24:mi:ss')
to_date("要转换的字符串","转换的格式")
- ADD_MONTHS(date,count)
在指定日期上增加count个月,可为负数 - LASE_DAY(date)
返回所在月的最后一天 - MONTHS_BETWEEN(date1,date2)
返回date1和date2间隔多少个月 - NEXT_DAY(date,'day')
返回指定日期后的第一个星期几的日期,如NEXT_DAY(DATE,'星期一') - SYSDATE
获取系统当前的日期值 - CURRENT_TIMESTAMP
获取当前的时间和日期值 - ROUND(date,'day')
对日期进行四舍五入,如ROUND(DATE,'MM'),按月四舍五入
注意DAY是周,DD是按当前天四舍五入 - TRUNC(date,'day')
对日期进行截取
4.nvl和nvl2
- NVL2(expr1,expr2,expr3)
功能:如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。 - NVL( string1, replace_with)
功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。 - NULLIF(A,B)
如果A和B相等则返回null,否则返回A - COALESCE(A,B,C,...)
返回第一个不为空的字符
5.字符串
- 字符串连接采用'||'连接,支持Concat语句,Oracle的CONCAT()函数只支持两个参数,可以使用多个CONCAT()函数嵌套使用
SELECT '工号为'||FNumber||'的员工姓名为'||FName FROM T_Employee
WHERE FName IS NOT NULL
- substr函数格式 (俗称:字符截取函数)
格式1:substr(string string, int a, int b);
格式2:substr(string string, int a) ; - instr(string,subString,position,ocurrence)查找字符串位置
解释:
string:源字符串
subString:要查找的子字符串
position:查找的开始位置
ocurrence:源字符串中第几次出现的子字符串 - replace(strSource, str1, str2) 将strSource中的str1替换成str2
解析:strSource:源字符串
str1: 要替换的字符串
str2: 替换后的字符串 - chr(integer)
描述给定整数所对应的ASCII字符 - concat(string1,string2)
连接字符串string1和string2 - initcap(string)
将字符串string的第一个字母变为大写其余不变 - lower(string)
将字符串string的全部字母变为小写 - upper(string)
将字符串string的全部字母变为大写 - lpad(string,count,char)
让指定的字符char在字符串的左边填充
-rpad(string,count,char)
让指定的字符在字符串string的右边填充
-ltrim(string,char)
去掉字符串string左边char指定的字符
-rtrim(string,char)
去掉字符串string右边插入指定的字符
-replace(string,char,cahr)
替换字符串
-substr(string,start,length)
获取子串,start为0和1都表示第一位
-length(string)
获取字符串的长度
6.类型转换
oracle,字符串,数字,日期时间之间的转换使用to_char,to_date和to_number实现,具体使用如下
- 日期转字符串
TO_CHAR(DATE,FORMAT)
TO_CHAR(DATE,'yyyy-mm-dd') - 字符串转日期
TO_DATE(STRING,FORMAT)
TO_DATE('2020-5-25','yyyy-mm-dd')需保证前后格式一致
HH24代表24小时制,HH代表12小时制 - 数字转字符串
TO_CHAR(NUMBER,FORMAT)
TO_CHAR(20000,'$9999') - 字符串转数字
TO_NUMBER(string,format)
TO_NUMBER('234234','999999')
需保证前后格式一致,否则报错 - 注意
9代表一个数字,0表示强制显示为0,$表示货币符号,L本地货币符号,.小数点,,千分位
日期->>字符串: TO_CHAR
字符串->>日期: TO_DATE
数字 ->> 字符串:TO_CHAR
字符串 ->> 数字:TO_NUMBER
graph LR
日期--TO_CHAR -->字符串
字符串--TO_DATE -->日期
数字--TO_CHAR -->字符串
字符串--TO_NUMBER -->数字
7.数字函数
oracle支持mod,power,ceil,floor对数字进行处理,与mysql中一致
- TRUNC(NUMBER,PRESSION)
对number进行截取,保留pression小数,
trunc还可常用来进行时间处理 - ROUND(NUMBER,PRESSION)
保留小数,对数进行四舍五入
8.分页
Oracle 分页使用rownum实现
SELECT *
FROM (
SELECT tt.*, ROWNUM AS rowno
FROM(
SELECT AAC001,CAC001,AAB001
FROM Ac60
ORDER BY Ac60.CAE262 DESC
) tt
WHERE ROWNUM <= 150
)
table_alias
WHERE table_alias.rowno > 99
rownum是查询后oracle给予的编号从1开始,给order by分页,要进行order by在通过子查询给予rownum,rownum关键字不能使用> >=只能使用< <=要使用同样通过子查询封装在外层通过别名实现
9.关于null
- =null和<>null和!=null恒不成立
- in和any子查询中存在nul,没有影响
not inin和all查询不出数据