1,===========字符函数
·lower(char)
·upper(char)
·length(char)
·substr(char,begin,length)
这里要注意一下下的是:begin 是从第几个开始,length是指取多长,不要和java中substring混淆了,java中的substring中的最后一个参数是取到第几个位置
·replace(char1,char2,char3)
把char1中的char2字符替换成char3字符
·instr(char, ch , n , m) --找到ch在char中的位置,返回的是一个整数,表示出现的位置
n : 从char中的第几个字符开始找,可以是负数,如果是负数的话,那么从最后面开始找,
m : 找第几次出现的位置
demo:
SQL> SELECT INSTR('CORPORATE FLOOR','OR', -1, 2) from dual;
找到‘OR’在 'CORPORATE FLOOR'中出现的位置,但是是从最后面开始找,从前面数第一个出现的位置:
结果是 : 5
2,========数值函数,
·round(n[, m ]): 四舍五入函数,m 是保留的小数位,如果是负数的话,就是整数位
SQL> select round(1203.352,-1) from dual; -- 1200
·trunc(n[, m]) : 只舍不入函数,和round一样,只是这个函数不会进行五入的操作
·mod(n,m) :取余
·floor(n):不大于n 的最大整数
·ceil(n) :不小于n 的最小整数
其他的一些不常用的数值函数请查阅文档。。。
3,=========日期函数
·sysdate : 系统时间
·add_months(date, n ) : 增加月份
?显示入职超过20年的员工信息
SQL>select * from emp where sysdate > add_months(hiredate, 240); --增加月份
·last_day(date) : 显示每个月的最后一天的日期
?查询每个月的最后三天入职的员工信息
SQL> select * from emp where hiredate > last_day(hiredate)-3 ;
·to_date(char,format): 在字符串转换为固定日期格式
SQL > insert into emp values(....., to_date('1990-02-12','yyyy-mm-dd') ,....);
·to_char(sysdate,'yyyy') 得到年
to_char(sysdate,'MM') 得到月
to_char(sysdate,'Q') 得到季度,1-3为第一季度
to_char(sysdate,'ddd') 得到一年中的第几天
to_char(sysdate,'dd') 得到一个月中的第几天
to_char(sysdate,'d') 得到一周中的第几天
to_char(sysdate,'dy') 得到中文的星期几,如:星期六
to_char(sysdate,'ww') 得到当年的第几周
to_char(sysdate,'w') 得到当月的第几周
to_char(sysdate,'hh24') 得到小时,24小时制的
to_char(sysdate,'hh12')
to_char(sysdate,'mi') 得到分钟
to_char(sysdate,'ss') 得到秒
?显示入职超过20年的员工信息
SQL>select * from emp where to_char(hiredate+ 20,'yyyy') < to_char(sysdate,'yyyy') ;
4,转换函数
在oracle中有些情况下会自动转换类型:
如:
· create table test(tid number(4));
insert into test values('1001'); -- oracle 会把‘1001’转换为1001
·create table test(tid varchar2(4));
insert into test values(1001); -- oracle 会把 1001 转换为‘1001’
但是很多情况下,oracle需要借助转换函数来转换:
如:
to_date(); --在上面的日期函数的时候有提到
to_char(); -- 上面在日期函数的时候有说道
SQL> select ename,to_char(sal,'L99,999.99') from emp ; ---为什么是五个9,因为sal字段的长度是number(7,2) ;
5,======系统函数