常用系统函数

-------------------常用系统函数(一)--------------------
select add_months(sysdate,12) "Next Year" from dual;--用于从一个日期值增加或减少一些月份
select months_between('2019/12/6', sysdate) "months" from dual;--判断两个日期之间相差的月份
select last_day(sysdate) from dual;--函数返回包含日期的月份的最后一天
select round(sysdate,'MONTH') from dual;--将日期d按照fmt指定的格式舍入,fmt为字符串
select round(sysdate,'YEAR') from dual;
select trunc(sysdate,'MONTH') from dual;--返回由fmt指定的单位的日期
select trunc(sysdate,'YEAR') from dual;
select next_day(sysdate,'星期五') nxt_day from dual;
select extract(month from sysdate) "month" from dual;--找出日期或间隔值的字段值
select extract(year from sysdate) from dual;
select initcap('hello') from dual;
select lower('HOW ARE YOU') from dual;
select upper('hello world') from dual;
select ename,job,sal from emp where upper(job)=upper('clerk');
select ltrim('xyzadams','xyz')from dual;
select rtrim('xyzadams','ams') from dual;
select translate('JACK and JUE', 'J','BL') "CHANGE"  from dual;--TRANSLATE(string,from_str,to_str):返回将(所有出现的)from_str中的每个字符替换为to_str中的相应字符以后的string
select replace('JACK and JUE','J','BL') "CHANGE" from dual;--replace(string,search_str,replacement_str):返回的是string中每次search_str中出现的地方由replacement_str代替后的string
select instr('abcdeadab','a',2,2) from dual;--Instr (string,char, m, n):从m位置开始寻找第n个string字符(串)(缺省m,n为1)
select instr('abcdeadab','a') from dual;
select substr('abcdefgh',2,4) from dual;--SUBSTR(column|expression,m[,n])->返回从m开始的n个字符;若m为负值,则从末尾开始数m
select concat('hello',' world') from dual;
select chr(65) from dual;
select ascii('a')  from dual;
select lpad('abcde',10,'w')from dual;
select lpad('abcde',10,'wt') from dual;--(string1,x[,string2]):返回在X字符长度的位置上插入一个string2中的字符的string1 
select rpad('abcde',10,'w') from dual;--(string1,x[,string2]):返回在X字符长度的位置上插入一个string2中的字符的string1  
select trim(0 from 7600) from dual;--([leading/trailing/both][匹配字符串或数值][from][需要被处理的字符串或数值])
select trim('中' from '中秋八月中') asfrom dual;
select trim(leading '半' from '半夜二更半') asfrom dual;
select length('how are you') from dual;
select empno,ename,job,sal,
  decode(job,'CLERK',    sal*1.5,
             'SALESMAN', sal*2.0,
             'MANAGER',  sal*3,
         sal ) as "new salary"
  from emp;--decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
-------------------常用系统函数(二)--------------------
select abs(-12) from dual;--此函数用来返回一个数的绝对值
select ceil(44.778)from dual;--用来返回大于或等于X的最小整数
select cos(180) from dual;--返回x的余弦值。x是以弧度表示的角度
select cosh(0)from dual;--返回X的双曲余弦
select floor(100.2) from dual;--用来返回小于或等于X的最大整数
select power(4,2) from dual;--(x,y)函数,返回X的Y次幂。底X和指数Y都不必是正整数,但如果X是负数的话,Y必须是整数  
select mod(10,3) from dual;--(被除数,除数)求余函数,如果除数为0,则返回被除数
select round(100.347,2) from dual;--ROUND(x[,y])函数,返回舍入到小数点右边Y位的X值。Y缺省为0,这将X舍入为最接近的整数。如果Y是负数, 那么舍入到小数点左边相应的位上,Y必须为整数
select trunc(100.347,2) from dual;--TRUNC(x[,y])截取值函数,Y缺省为0,这样X被截取成一个整数。如果Y为负数,那么截取到小数点左边相应位置
select trunc(100.347,-2) from dual;
select sqrt(4) from dual;--SQRT(x)函数,返回x的平方根,x不能是负数
select sign(-10) from dual;--SIGN(x)函数,此函数用来返回一个数的正负值,若为一个正数则返回1,若为一个负数则返回-1,若为0则仍返回0,有点像把模拟量数字化的意思
select sign(5) from dual;
select sign(0) from dual;
select sysdate from dual;
select to_char(sysdate, ' YYYY "年" fmMM "月" fmDD "日" HH24:MI:SS ') FROM DUAL;
select ename, to_char(sal,'C99999')as SALARY from emp;
select to_date('2009-03-11','yyyy-mm-dd') from dual;
select to_number('100') from dual;
select sqrt(to_number('100'))from dual;
select empno,ename,sal,comm, sal+comm "new salary" from emp;
select ename, sal,comm, NVL (comm,0)+sal "new salary" from emp;--NVL(exp1,exp2) :  如果exp1为null,则NVL返回exp2;反之返回exp1
select ename, sal,comm, NVL2(comm,sal+comm,sal) "new salary" from emp;--NVL2(exp1,exp2,exp3) :如果exp1不是null,则返回exp2,如果是,则返回exp3 
--NULLIF(exp1,exp2) :如果exp1,exp2相等则返回null,否则返回exp1
select avg(sal) "avg salary" from emp;
select min(sal) "最低工资" from emp;
select max(sal) "最高工资" from emp;
select sum(sal) "工资总和" from emp;
select count(*)as 员工人数 from emp;
select count(distinct deptno)  as 部门数 from emp;
select count(deptno) as 部门数 from emp;
--GROUP BY子句用于将信息划分为更小的组每一组行返回针对该组的单个结果
--HAVING子句用于指定 GROUP BY 子句检索行的条件
select ename,job,deptno,sal, row_number() over (order by sal desc) as sal_rank;--ROW_NUMBER 返回连续的排位,不论值是否相等
select deptno,ename,sal,comm, rank() over(partition by deptno order by sal desc,comm) rank from emp;--RANK 具有相等值的行排位相同,序数随后跳跃
select d.dname,e.ename,e.sal,dense_rank() over(partition by e.deptno order by e.sal desc) as denrank  from emp e, dept d  where e.deptno=d.deptno;--DENSE_RANK 具有相等值的行排位相同,序号是连续的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值