Oracle函数-单行函数-数字、日期、日期处理函数
函数的分类
单行函数:一个input对应一个output,input和output存在一一对应的关系 如lower
组函数:多个input,但是只对应一个output。如 sum()
==========================================================
单行函数
特点:
每行返回一个结果,输入输出存在一一对应的关系
能嵌套使用 ,一个函数的输出能做另外一个函数的输入 如:select lowner(upper('aa')) from dual;
传入的变量可以是列的值,也可以是表达式。 如 select lower(ename) from emp;
==========================================================
1、数字函数
对数字进行操作,是加减乘除的补充
SQL>select round(45.926,2) from dual; --四舍五入,第二位保留几个小数点
SQL>select trunc(45.926,2) from dual; --直接截取,不进行四舍五入
SQL>select mod(10,3) from dual; --求余数
2、日期函数
oracle数据库存储日期的默认显示格式是DD-MON-YY
修改日期显示格式:
alter session set nls_date_format='<需要的格式>';
3、SYSDATA:查看系统时间
SQL>select sysdate from dual; --查看系统当前时间
SQL>select sysdate,sysdate-7 from dual; --减1星期
SQL>select sysdate,sysdate-1 from dual; --减1天
SQL>select sysdate,sysdate-1/24 from dual; --减1小时
SQL>select sysdate,sysdate-1/24/60 from dual; --减1分钟
SQL>select sysdate,sysdate-1/24/60/60 from dual; --减1秒
4、日期处理函数
现有日期加上或者减去一个值会得到一个日期。如 select sysdate,sysdate-7 from dual;
两个日期相减可以得到两个日期的天数(时间间隔) 如 select (sysdate-hiredate)/7 weeks from emp;
①months_between 两个日期之间有多少个月
SQL>select months_between(sysdate,sysdate-1000) from dual;
②add_months 指定日期下加多少个月
SQL>select add_months(sysdate,2) from dual;
③last_date 指定日期的最后一天
SQL>select last_day(sysdate) from dual;
5、日期的四舍五入:
对年份,按照1-6月,7-12月进行四舍五入
对月份,按照1-15,15-31日进行四舍五入
对日,按照星期天到星期三,注意:每周的开始是星期天。
SQL> select sysdate from dual;
SYSDATE
------------
16-MAY-16 当前是16年5月16日
==========================================================
SQL> select round(sysdate,'year') from dual;
----对年进行四舍五入,也就是精确到年份,现在是5月,没有过6月,所以结果为16-1-1
ROUND(SYSDATE)
------------
01-JAN-16
==========================================================
SQL> select round(sysdate+60,'year') from dual; -5月16日加60天,已经到了7月,所以结果为17-1-1
ROUND(SYSDATE)
------------
01-JAN-17
==========================================================
SQL> select round(sysdate,'month') from dual;
-----对月份进行四舍五入,也就是精确到月份。现在是16号,过了15,号 所有结果为下一个月1日
ROUND(SYSDATE)
------------
01-JUN-16
==========================================================
SQL> select round(sysdate+22,'month') from dual;
----现在是5月16号,22天后是7月7日, 7号没有过15,所以结果为16-07-01
ROUND(SYSDATE)
------------
01-JUL-16
==========================================================
SQL> !date
Mon May 16 22:47:25 CST 2016
2016年5月16日,周一, 本周的起始时间是 5月15日(每周日为一个星期的开始,周六为一个星期的结束)
==========================================================
SQL>select round(sysdate,'day') from dual;
----对日进行四舍五入,也就是看星期几 5月16日是星期一,没过星期三,所以不"进位",显示本周第一天
ROUND(SYSDATE)
------------
15-MAY-16
==========================================================
SQL>select round(sysdate+3,'day') from dual;
----16日是星期一,加三天就是星期四,超过了星期三,所以进位,显示下一周的星期一
==========================================================
SQL>select round(sysdate-3,'day') from dual;
----星期一减三天是上个星期的星期五,超过了星期三,所以进位,显示当前周的下一个星期一,也就是15号