Oracle中的基本函数

  • Post author:
  • Post category:其他


基本函数


字符串函数



upper(字符串|列)



返回字符串;将字符串转位大写


select upper(‘hello’) from dual;

select upper(ename) from emp;



lower(字符串|列)



返回字符串;将字符串转位小写


select lower(‘HELLO’) from  dual;

select lower(ename), c.* from emp c;


upper()和lower() 主要用于查询时用户输入的区分大小写的数据;一般会统一转小写或大写;



initcap(字符串|列)



返回字符串;开头字母大写,其他字母小写;


select initcap(ename) from emp c;


length(字符串|列)



返回数字;获取指定字符的长度


select length(ename) from emp;



substr(开始索引[,长度]);



进行字符串的截取,如果没有设置长度,表示从开始索引第一位截取到结尾;


select substr(‘helloworld’,6) from dual;



下标从1开始 如果设置为0也会按1的方式处理;


select substr(‘helloworld’,0,5) from dual;

select substr(‘hello world’,5,3) from dual;


–截取ename的后三位


select ename,substr(ename,length(ename)-2,3) from emp;

–包前不包后


select ename,substr(ename,-3) from emp;

—可以设置负数



replace(字符串|列,旧字符串,新字符串 );


替换


数值函数



round(列|数字[,小数位])



返回数字;四舍五入;


–如果没有设置小数点的保留位数,那么会不保留小数直接进位;

–可以设置负数,表示进行整数位进行四舍五入;

select round(788.6)from dual;

select round(726.6,-2) from dual;–700


trunc(列|数字[,小数位])



返回数字;数据截取,不进位;


select trunc(769.5641234),trunc(769.5641234,2),trunc(769.5641234,2) from dual;


mod(列|数字,列|数字)



返回数字 求模(求余数)


select mod(10,3) from dual;


日期函数



–当前时间


,oracle提供了一个伪列

sysdate


select sysdate from dual;

–日期操作公式

日期+数字=日期(表示若干天之后的日期)

日期-数字=日期(表示若干天之前的日期)

日期-日期=数字(天数)


select sysdate-7,sysdate+240 from dual;



对于日期而言,由于每个月的天数是不同的,所以直接进行天数加法实现月数的计算是不准确的;


—查询出每个雇员的编号、姓名、职位、已经被雇用的天数


–如果直接使用天数来实现年或月的计算,那么最终的结果一定是不准确的;


select e.empno,e.ename,e.job,sysdate-e.hiredate

from emp e where e.hiredate is not null;

–为了实现准确的日期操作,oracle 提供了日期函数来处理日期



add_months

(列|日期,数字) 返回值:日期 在指定日期上增加若干个月之后的日期


months_between

(列|日期,列|日期) 返回值:数字   返回两个日期之间所经历的月数;


last_day

(列|日期) 返回值:日期 取得指定日期所在月的最后一天;


next_day

(列|日期,星期X) 返回值:日期   返回下一个指定的一周时间数对应的日期



4个月后的日期


select

add_months

(sysdate,4) from dual;



-计算所有的雇员到今天为止的雇用月数


select

months_between

(sysdate,hiredate) from emp;



当前月份的最后一天日期


select

last_day

(sysdate) from dual;



查询出所有员工的编号、姓名、雇用日期、雇用所在月的最后一天


select e.rowid, e.empno,e.ename,e.hiredate,last_day(e.hiredate)

from emp e;



查询出所有的用过被雇用所在月倒数第三天雇用的雇用信息


select e.* ,e.hiredate, last_day(hiredate)from emp e where hiredate=(last_day(hiredate)-2)


–查询下个星期二的日期


select

next_day

(sysdate,’星期二’) from dual;、




用年,月,日的方式计算出每个雇员到现在为止的雇用年限





1.每一位雇员到现在为止雇用的年份;



oracle 提供了两种方式计算年份



a.

日期-日期=天数/365 (无法去除润年)


b.

Months_between(sysdate,hiredate)/12=年


select trunc(Months_between(sysdate,hiredate)/12) from emp e;



–2.求出雇佣的月数



select trunc(mod(Months_between(sysdate,hiredate),12)) from emp e



—3.求出雇佣的天数 日期-日期


—由于时间跨度太长,必须回避年和月的问题

雇用日期+雇用日期到现在日期为止所经历的月数

select trunc(sysdate-add_months(hiredate,Months_between(sysdate,hiredate))) from emp;



转换函数




to_char(列|日期|数字,转换格式)


返回值:

字符串 将日期或数字格式化为指定的字符串;



to_date(列|字符串,转换格式)

返回值:

日期 按照指定的转换格式编写字符串后将其变为日期型数据

转换格式的标记:


日期:年(yyyy) 月(mm),日(dd)

时间: 时(hh/hh24)分(mi) 秒(ss)

数字:任意数字(9) 货币符号(L)

select to_char(sysdate,’yyyy-mm-dd’) from dual;



利用to_char()实现日期的拆分;


select to_char(sysdate,’yyyy’),to_char(sysdate,’mm’),to_char(sysdate,’dd’) from dual;



查询在二月份雇用的雇员信息


select * from emp where to_char(hiredate,’mm’)=’11’;

oracle 提供了自动转型的操作,如果不匹配会自动匹配;

select to_char(12345678,’L999,999,999′) from dual;

select  to_date(‘2018-11-26′,’yyyy-mm-dd’) from dual;


通用的函数


空值替换函数




-nvl(列,默认值)


返回值:

数字 ;如果传入的内容是null,则使用默认数值处理,如果不是空则使用原始数值处理





nvl2(列名,非空值,空值)



decode()相当于 case when…then end;




decode(列|字符串|数值,比较内容1,显示内容1,…[,默认选择内容])





设置内容会和每个比较内容比较,如果内容相同则使用显示内容,如果不相同则使用默认选择内容显示;


select e.ename,sal+nvl(comm,0)*12



如果和null做的相关计算后结果为null;


select  null+1 from dual;

select e.*, decode(job,’java’,’JAVA工程师’,’manager’,’经理’,’普通员工’)from emp e;

select case when hylx=’11’ then ‘普通企业会员’

when hylx=’12’ then ‘认证企业会员’

when hylx=’13’ then ‘认证个人会员’

else ‘普通个人会员’ end hylxmc,

decode(hylx,’11’,’普通企业会员’,’12’,’认证企业会员’,’13’,’认证个人会员’,’普通个人会员’)  hylxmc2

from member c;



版权声明:本文为qq_29393273原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。