Oracle中的基本函数

--1.基本的函数查询
--1.字符串函数
   --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;
 --求出雇佣的月数
      select trunc(mod(Months_between(sysdate,hiredate),12)) from emp e
 ---求出雇佣的天数 日期-日期
 ---由于时间跨度太长,必须回避年和月的问题
 雇用日期+雇用日期到现在日期为止所经历的月数
    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,则使用默认数值处理,如果不是空则使用原始数值处理
 
--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;

 
 

 
 
   
 


 
 
 
 
 
 

扫描二维码关注公众号,回复: 4257101 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_29393273/article/details/84557952