Oracle基础教程:单行函数—日期类型函数

oraclestudyroad 2012-02-21

日期函数的处理
如果你对当前系统的日期格式 看这不舒服 可以修改当前会话的显示格式
idle> alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';

Session altered.

idle> select sysdate from dual;

SYSDATE
-------------------
2010-12-17 08:52:31

idle>  这是OS系统时间 数据库本身没时间 只有SCN号
日期可以直接参与运算
idle> select sysdate-10 from dual;

SYSDATE-10
-------------------
2010-12-07 08:53:16

两个日期型数据相减会得到相差的天数
idle> select to_date('2010-12-30')-sysdate from dual;

TO_DATE('2010-12-30')-SYSDATE
-----------------------------
     12.6290856

idle>
可以将日期型的数据和一个小时数相加减 这个数要除以24
idle> select sysdate from dual;

SYSDATE
-------------------
2010-12-17 08:55:56

idle> select sysdate + 5/24 from dual;

SYSDATE+5/24
-------------------
2010-12-17 13:55:56

idle>

计算scott的工龄
idle> select ename,(sysdate-hiredate)/365 "years" from emp where ename='SCOTT';

ENAME  years
---------- ----------
SCOTT    23.6804732

idle>

日期型函数
 MONTHS_BETWEEN
 ADD_MONTHS
 NEXT_DAY
 LAST_DAY
 ROUND 和 TRUNC 对日期的取舍

MONTHS_BEWTEEN(日期1,日期2)
如果日期1大于日期2返回正数,日期1小于日期2返回负数
idle> select months_between('2010-10-10','2010-12-10') from dual;

MONTHS_BETWEEN('2010-10-10','2010-12-10')
-----------------------------------------
           -2

idle> select months_between('2010-12-10','2010-10-10') from dual;

MONTHS_BETWEEN('2010-12-10','2010-10-10')
-----------------------------------------
     2

idle>

ADD_MONTHS(日期,n)
把n个月加到日期上
idle> select add_months('2010-10-10',3) from dual;

ADD_MONTHS('2010-10
-------------------
2011-01-10 00:00:00

idle>

NEXT_DAY(日期,星期)
从当天算起,求下一个指定星期几是几号. 如果是中文系统将MONDAY改成"星期一"
idle> select next_day(sysdate,'MONDAY') from dual;

NEXT_DAY(SYSDATE,'M
-------------------
2010-12-20 09:02:06

idle>
idle> select next_day(sysdate,'fri') from dual;

NEXT_DAY(SYSDATE,'F
-------------------
2010-12-24 09:02:44

idle>

LAST_DAY(日期)
返回该日期的所在月的最后一天

idle> select last_day(sysdate) from dual;

LAST_DAY(SYSDATE)
-------------------
2010-12-31 09:03:26

idle>

idle> alter session set nls_date_format='YYYY-MM-DD';

Session altered.
idle> select ename,hiredate,last_day(hiredate),next_day(hiredate,'SUN'),months_between(sysdate,hiredate) "MON",ADD_MONTHS(hiredate,3) from emp
where ename='SCOTT';

ENAME    HIREDATE   LAST_DAY(H NEXT_DAY(H    MON ADD_MONTHS
---------- ---------- ---------- ---------- ---------- ----------
SCOTT    1987-04-19 1987-04-30 1987-04-26 283.947709 1987-07-19

idle>


ROUND(date,'[day|month|year]') 和 trunc(date,'[day|month|year]') 应用于日期型数据
数字的进位和截取是以小数点为中心,而日期的进位和截取是以年月日时分秒为中心

idle> select round('2010-10-10','MONTH') from dual;
select round('2010-10-10','MONTH') from dual
             *
ERROR at line 1:
ORA-01722: invalid number

相关推荐