oracle函数

以下所有内容仅供个人记录,可能会有错误,恳请指正。

一.new fuction

今天一共学了不少新函数,我将函数的结构参数与方法,注意事项记录在例题中。

数值函数

1.员工总工资,平均工资,四舍五入,保留小数点后2位
SELECT ROUND(SUM(SAL),2),ROUND(AVG(SAL),2) FROM EMP;

ROUND函数可以进行四舍五入运算     ROUND(NUMBER,INTEGER)其中INTGER表示小数点左右保留的位数。

当INTEGER  >  0时保留小数点后int位

当INTEGER  <  0时保留小数点前int位,剩余位补0

另外小数参数只能是整形,浮点数无用。

与round相关的函数还有  ceil()和floor()

顾名思义,ceil(number)表示向上取整,floor(number)表示向下取整

字符函数

2.显示所有员工姓名的前三个字符。
SELECT SUBSTR(ENAME,1,3) FROM EMP;

substr(str,star,number):在所给的字符串从star开始,数number个字符长度

其中只有number可以省略,若省略则会数到max(length(str))结束。

length(str)会返回字符串的长度

3.显示正好为5个字符的员工的姓名。
select ename from emp where length(ename)=5;
select ename from emp where length(substr(ename,1))=5;

4.以首字母大写,后面小写的方式显示所有员工的姓名。
select initcap(ename) from emp;
5.以首字母小写,后面大写的方式显示所有员工的姓名。
select concat(substr(lower(ename),1,1),substr(upper(ename),2))from emp;

如题,函数initcap(str)的作用是 将str首字母大写,其余字母小写

但目前没学到一个可以将str小写,其余大写的函数

为了完成第二个题 先介绍两个函数 upper(str)和lower(str)分别表示将str全大写或者全小写,利用这两个函数再加上 concat或者|| 就可以实现。

这里顺带提一下concat(str1,str2),它的作用是将两个字符串连接起来。

6.显示所有员工的姓名,用“我”替换所有“A”
select replace(ename,'A','我') from emp-- REPALCE(STR,'被替换','替换的')

函数replace(str,'被替换的','替换的'):可以将指定的字符串进行替换,其中可以用整体思想

7.求名字中至少有两个A的员工
select ENAME from emp WHERE INSTR(ename,'A',1,2)>0;

函数instr(str,'s',star,times)表示在给定的str中从star位置开始寻找s第times出现的位置

注意instr()返回的是字符的位置

11.以字符长度为10的方式显示员工职位,多余的位数在右边以*来填充
select rpad(ename,10,'*') from emp;

函数rpad(str,newstr.length,'要补充的字符')表示将str的长度用指定的字符补充到newstr.length

与此类似的函数还有lpad(str,newstr.length,'要补充的字符')

需要注意的是 当newstr.length < str.length时 会对str进行截断

13.去除字符串“ aadde gf ”两边的空格
select trim(' ' from ' aadde gf ') from dual;

首先是三个和去除字符串有关的函数:

trim(s from str):去除str 两边的s

ltrim(str,s):去除str 左边的s
rtrim(str,s):去除str 右边的s

需要注意的是 三者格式并不都相同

日期函数

10.显示所有10月份入职的员工
SELECT * FROM EMP WHERE TO_CHAR(TRUNC(HIREDATE,'MM'),'MM')=12;

trunc(date,'要截取的位置'):可以将日期进行截取

yyyy mm dd

当trunc截取这三者时 yyyy会默认yyyy/1/1

                                   mm会默认yyyy/mm/1

所以使用trunc截取后不能直接截到你想要的单个年或者月

需要使用to_char,to_char在将日期转换为char后没有默认值,可以方便的拿出来进行比较。

4.查询一个月前入职的员工
select * from emp where months_between(sysdate,hiredate)=1;

函数months_between(date1,date2)可以返回两个日期的月份差值

注意是date1-date2 可能返回负值

7.从当前时间算,下个星期三是多少号?
select next_day(sysdate,4) from dual;

函数next_day(date,一周的第几天):可以返回指定日期最近一周的第几天

西方周末是第一天

1.使用decode函数,职位是分析员的,工资+1000;职位是经理的,工资+800;职位是其它的,工资+400
select job,decode(job,'ANALYST',SAL+1000,'MANAGER',SAL+800,SAL+400)as newsal FROM EMP;

decode函数(cloumn_name,'if1','result1','if2','result2',...,'else')

此else非else 直接表示其他类型的结果

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值