- --SQL单行函数练习
- --1.日期函数
- select add_months(sysdate,2) from dual--添加月
- select months_between(sysdate,add_months(sysdate,2)) from dual--计算差值
- select last_day(sysdate) from dual--计算当月最后一天
- select round(sysdate,'year'),round(sysdate,'month'),round(sysdate,'day') from dual--四舍五入得到日期
- select next_day(sysdate,'星期二') from dual--得到下个星期几的日期
- select trunc(sysdate) from dual--去除日期后面的时间
- select extract(year from sysdate) from dual--截取指定日期的指定部分
- --字符函数
- select initcap('hello') from dual--首字母大写
- select lower('FUN') from dual--转换为小写
- select upper('sun') from dual--转换成大写
- select ltrim('xyzdafsdf','xyz') from dual--左裁剪 result: dafsdf
- select rtrim('xyzadtty','tty') from dual--右裁剪 result:xyzad
- select translate('jack','abcd','1234') from dual --按字符翻译,result: j13k
- select replace('jack and jue','j','bl') from dual--字符串替换 result: black and blue
- select instr('worldwide','d') from dual --查找子串位置
- select substr('abcseefe',3,2) from dual--截取指定位置字符串
- select concat('Hello','World') from dual --连接字符串
- select chr(67) from dual--根据ASCII码来返回对应的字母
- select lpad('function',15,'*') from dual--左填充,不满15个在左边填充
- select rpad('function',15,'*') from dual--右填充,不满15个在右边填充
- select trim(leading 9 from 9999994242523424) from dual--裁剪指定字符(leading-字符串开头 , trailing -末尾)
- select trim(trailing 9 from 99999942425234249999999999) from dual--裁剪指定字符(leading-字符串开头 , trailing -末尾)
- select trim(9 from 99999942425234249999999999) from dual
- select length('fafsdfs') from dual--返回字符串长度
- select decode(to_char(sysdate,'yyyy'),'2008','yes','no') from dual--逐个比较 yes
- --数字函数略
- --转换函数
- select to_char(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24:MI:SS') from dual
- select to_date('2005-12-06','yyyy-mm-dd') from dual
- select to_number('1002')*2 from dual
- --其他函数
- select nvl(comm,12) from emp --将空值设定成指定数字
- select nvl2(comm,1,2) from emp --将空值是否为空来判断,不为空,显示1 为空: 显示2
- select nullif(122,12) from dual--比较两个表达式,相同返回null 不同则返回第二个表达式
- --分组函数
- select avg(sal) from emp
- select min(sal) from emp
- --其余略……
- --分析函数
- --对员工工资排名,工资相同,而排名也不同
- select ename,job,deptno,sal,ROW_NUMBER() over (order by sal desc) as sal_rank from emp
- --ROW_NUMBER() 函数语法 row_number() over (一个有序数烈) 为排序之后的数据每个编个号
- --对员工的工资按部门排名,
- select ename,job,deptno,sal,row_number() over (partition by deptno order by sal desc) as sal_rank from emp
- --根据员工的工资和佣金对员工在每个部门进行排序, 相同工资相同排名,而排名不连续
- select ename,sal,comm,deptno,rank() over (partition by deptno order by sal desc, comm) rank from emp
- --
- select d.dname,e.ename,e.sal,dense_rank() over (partition by e.deptno order by e.sal desc) denserank from emp e,dept d
- where e.deptno=d.deptno
- --首先选择部门名称,员工姓名和工资,再分别计算出每个员工工资在部门中的排位,相同的排位相同