因为round不能处理字符型数据,所以报错,我们要将字符型数据转换为日期型 idlegt; select round(to_date(
日期函数的处理
如果你对当前系统的日期格式 看这不舒服 可以修改当前会话的显示格式
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
,