oracle函数

/*
Oralce函数大致分为:
  一.单行函数(标量函数)
    1.日期函数
    2.字符函数
    3.数学函数
    4.转换函数
    5.其他函数
  二.分组函数(聚合函数)
  三.分析函数
*/

-----------------1.日期函数-----------------
--dual表:辅助查询
--使用dual表显示当前时间sysdate
select sysdate from dual;

--加月份add_months(时间,月份)
--时间格式 25-9月-2019或者 25/9月/2019
select add_months(sysdate,1) from dual;
select add_months('1-1月-2020',1) from dual;
select add_months(to_date('2000-10-1','yyyy-mm-dd'),1) from dual;

select * from dual;
--相差月份months_between(时间1,时间2)  结果是时间1减去时间2 
select months_between(sysdate,'1-1月-2021') from dual;

--extract(year/month/day from sysdate)获得完整日期的一个部分
select extract(month from sysdate) from dual;

--相差年份 --找到emp表中的员工距离今天一共入职多少年
--1.获取今年的年份
--2.获取入职的年份
--3.今年年份减去入职年份
select extract(year from sysdate) from emp;
select extract(year from hiredate) from emp;

select  emp.*,extract(year from sysdate)-extract(year from hiredate) as ys from emp;

select emp.*,extract(year from hiredate) from emp;
--查询emp表员工在公司工作了多少天
--用当前日期sysdate 减去 入职日期  得到得就是天数
select emp.*,sysdate-hiredate as days from emp;

--查询员工入职日是星期几
--得到星期to_char(时间,'day')
select to_char(sysdate,'day') from dual;

select emp.*,to_char(hiredate,'day') as week from emp;

--查询员工入职了多少个月 
--months_between(时间1,时间2) 
select emp.*,months_between(sysdate,hiredate) as ms from emp;

--varchar2类型做时间字符串,方便,但是不安全
--开发便捷,但是程序不安全
--java.util.date
--java.sql.date

--返回指定时间月的最后一天
--求月末last_day(时间) 
--'1-10月-1949' 自定义时间请注意格式
select last_day(sysdate) from dual;

-- 日期N后的第一个day of week(dow)
-- next_day(开始时间,N) 
-- N可以用 中文 '星期日' 
-- 或者用 1-7 的数字,星期日为1
select next_day(sysdate,6) from dual;

--查询2月入职的员工 -- 条件查询
--extract(month from 字段)
select * from emp where extract(month from hiredate) =2;

select extract(month from hiredate) from emp;

-----------------2.字符串函数-----------------
--字符串截
--substr('字符串',开始下标,截取长度)
--下标从1开始
--java,c#,js....oracle
select substr('长沙华瑞IT教育',5,2) from dual;

--员工姓名的小写形式
--lower小写(字段)
--upper大写
select emp.*,lower(ename) from emp;

select upper('zdlawp') from dual;

--姓名长度为5的员工信息
--length(字段) 
select emp.*,length(ename) from emp where length(ename)=5;

--查询所有员工的姓名的前三个字符
--substr(字段,开始位置,长度)
select emp.*,substr(ename,1,3) from emp;

--替换字符串replace(字符串,要替换的字符,[替换后的字符])
--如果没有指定替换后的字符,则表示删除所有要替换的字符。
--将姓名S替换为5 
--replace('原字符串','需要替换的字符串','替换后的字符串')
select emp.*,replace(ename,'S','A') from emp;

--求字符串'    asdf   asdfs   asdfsdf    '里面有多少空格
--1.先求出字符串总长度 length('字符串')
--2.再求出去掉空格后字符串的长度
select length('    asdf   asdfs   asdfsdf    ') from dual;
select length(replace('    asdf   asdfs   asdfsdf    ',' ')) from dual;
select length('    asdf   asdfs   asdfsdf    ')-length(replace('    asdf   asdfs   asdfsdf    ',' ')) from dual;

--3.相减
--字符串拼接concat(字符串1,字符串2)相当于||
--String str="abc";
--str=str.concat("def");
select concat('abc','def') from dual;
select 'abc' || 'def' from dual;


--select * from dual
--求字符对应的ascii码 ascii对应的字符
--ascii('字符')  转换成数字
--chr(数字) 转换成字符
--97 a
--65 A
select  ascii('A') from dual;
select chr(100) from dual;

--select from dual;

-----------------3.数学函数-----------------
--随机数 dbms_random.value(范围1,范围2)
--97~122 a-z
--产生a-z中的任意一个字母
select chr(dbms_random.value(97,122)) from dual;

--取整(四舍五入) round(N)
select round(10.5) from dual;

--取整(小于N的最大整数) floor(N)
select floor(10.9) from dual;

--取整(大于N的最小整数) ceil(N)
select ceil(10.1) from dual;

-- 银行家算法(银行稳赚不亏)
-- 1.001

--取余数 mod(被除数,除数) 取模
select mod(10,3) from dual;

--四舍五入保留M位小数 round(N,M)  
--N数字 M位数
select round(10.445,2) from dual;

-----------------4.转换函数-----------------
--to_char将数字或者是日期转变成指定格式的字符串
--to_char(d|n[,fmt]) d-日期,n-数字,fmt-指定日期或数字的格式
-- 将系统时间转变成 'xxxx年x月xx日'  格式输出 
--to_char(sysdate,'yyyy"年"mm"月"dd"日"')
--如果要家中文 需要""
select to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual;

--年 yyyy"年"
--月 mm
--日 dd
--星期几 day
--时间 hh:mi:ss 12小时制
--时间 hh24:mi:ss 24小时制
select to_char(sysdate,'yyyy') from dual;
select to_char(sysdate,'mm') from dual;
select to_char(sysdate,'day') from dual;
select to_char(sysdate,'hh24:mi:ss') from dual;

select extract(year from sysdate) from dual;
-- 印象笔记
-- 网易云笔记

--转金额to_char(数字,'$显示格式')
--$999.999
--$99,999.9
--$1,600 在工资前面加上 美元符号$
select to_char(sal,'$999,999.9') from emp;

-- to_date将日期"字符串" 转变为日期类型
-- to_date(时间,'yyyy-mm-dd')
-- to_date 将字符串 '2014年10-23' 转变成时间日期格式


select * from emp;
-----------------5.其他函数-----------------
--null值转成指定的值 
--nvl(参1,参2) 如果参1为空返回参2,否则返回参1。
--如果奖金为空,则发500块
select emp.*,nvl(comm,500) from emp;

--nvl2(参1,参2,参3),
--如果参1不为空,则取参2值,否则取参3值 
--员工奖金为为空的奖励500,其他的奖励200
select emp.*,nvl2(comm,100,500) from emp;

--计算所有员工的工资加奖金

--nullif(参1,参2)
--如果参1与参2相等,
--则返回null,否则返回 参数1
select emp.*,nullif(comm,300) from emp;

--分组函数(聚合函数)
--count()统计行
--avg()平均值
--sum()综合
--工资高于平均工资的人数
select count(*) from emp where sal>(select avg(sal) from emp)

--统计总共有多少职位distinct
select count(distinct(job)) from emp;

--avg()求平均值

--max()最大值

--min()最小值

--sum()求和

--求各部门平均工资和部门编号,要求显示工资大于2000
--部门分组
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值