ORACLE单行函数与多行函数之四:日期函数示例(二)

2014-11-24 17:05:50 · 作者: · 浏览: 1
t picture ends before converting entire input string BYS@bys1>select to_timestamp('05 13:48:22.1234567890','DD HH24:MI:SS.FF10') from dual; select to_timestamp('05 13:48:22.1234567890','DD HH24:MI:SS.FF10') from dual * ERROR at line 1: ORA-01821: date format not recognized 3.date函数只可以表示日期,不可以表示时间。在下面4中有应用示例。 默认值:年:同SYSDATE里的年;月:同SYSDATE里的月;日:1号;时分秒:均为0 4.判断指定日期是否是某一天的。to_date及date中如果只指定日期未指定时间,默认是0点0分0秒。即前一天23:59:59的下一秒。 注意BETWEEN AND 相当于大于等于和小于等于。所以属于某一天,严格来说应该是从当天0点的0秒到 当天23:59:59秒。1天除以86400即1秒 BYS@bys1> select 'TRUE' from dual where to_date('2013-11-02 21:48:22','YYYY-MM-DD HH24:MI:SS') between date'2013-11-01' and date'2013-11-06'-1/86400; 'TRU ---- TRUE BYS@bys1>select 'TRUE' from dual where to_date('2013/11/02 21:45:43','YYYY-MM-DD HH24:MI:SS') between to_date('2013-11-02','yyyy-mm-dd') and to_date('2013-11-03','yyyy-mm-dd hh24:mi:ss')-1/86400; 'TRU ---- TRUE 也可以用to_date对日期进行显式转换。 select 'TRUE' from dual where to_date('2013/11/02 21:45:43','YYYY-MM-DD HH24:MI:SS') between to_date('2013-11-02','yyyy-mm-dd') and to_date('2013-11-03','yyyy-mm-dd hh24:mi:ss')-1/86400; 'TRUE' ------ TRUE 注意BETWEEN AND 相当于大于等于和小于等于 BYS@bys1> select 'TRUE' from dual where to_date('2013/11/02 21:45:43','YYYY-MM-DD HH24:MI:SS') >= date'2013-11-02' and to_date('2013/11/02 21:45:43','YYYY-MM-DD HH24:MI:SS') <= date'2013-11-03'-1/86400; 'TRU ---- TRUE 其实也可以用小于11月3号来表示小于等于11月2号的23:59:59秒。 BYS@bys1> select 'TRUE' from dual where to_date('2013/11/02 23:59:59','YYYY-MM-DD HH24:MI:SS') >= date'2013-11-02' and to_date('2013/11/02 23:59:59','YYYY-MM-DD HH24:MI:SS') < date'2013-11-03'; 'TRU ---- TRUE 5.MONTHS_BETWEEN(a,b):表示a和b两个日期的月份之差,是a-b,如果a日期比b晚,即比b大,则为正数;反之,为负数。 BYS@bys1>Select EMPNO,HIREDATE,MONTHS_BETWEEN(Sysdate,HIREDATE)/12 dday,sysdate From EMP where rownum<3; EMPNO HIREDATE DDAY SYSDATE ---------- ------------------- ---------- ------------------- 7369 1980/12/17 00:00:00 32.8784294 2013/11/02 18:37:05 7499 1981/02/20 00:00:00 32.7036983 2013/11/02 18:37:05 BYS@bys1>
select months_between(sysdate,to_date('2011/11/11 11:11:11','yyyy-mm-dd hh24:mi:ss')) as dday from dual; DDAY ---------- 23.7196307 BYS@bys1>select months_between(to_date('2011/11/11 11:11:11','yyyy-mm-dd hh24:mi:ss'),sysdate) as dday from dual; DDAY ---------- -23.719639 6.ADD_MONTHS:表示给指定的日期加一个月数,即N个月后的日期。如果当前日期加上指定月数超过一年,则年份也自动增加。 BYS@bys1>select add_months(sysdate,1),add_months(sysdate,4) from dual; ADD_MONTHS(SYSDATE, ADD_MONTHS(SYSDATE, ------------------- ------------------- 2013/12/02 18:39:23 2014/03/02 18:39:23 7.NEXT_DAY:表示以当前时间为基准,下一个"目标日"的日期 BYS@bys1>select next_day(sysdate,'sunday'),next_day(sysdate,'tuesday') from dual; NEXT_DAY(SYSDATE,'S NEXT_DAY(SYSDATE,'T ------------------- ------------------- 2013/11/03 19:34:20 2013/11/05 19:34:20 8.LAST_DAY:计算当前日期的最后一天,即当月最后一天。 BYS@bys1>select last_day(sysdate) from dual; LAST_DAY(SYSDATE) ------------------- 2013/11/30 18:43:16 9.使用ROUND:对日期进行四舍五入 只能对年、月、日、时、分进行四舍五入;不能操作秒。 BYS@bys1>select round(sysdate,'yy') as year,round(sysdate,'mm') as month,round(sysdate,'dd') as day,round(sysdate,'hh') as hour,round(sysdate,'hh24') as hour24,round(sysdate,'mi') as minutes from dual; YEAR MONTH DAY HOUR HOUR24 MINUTES ------------------- ------------------- ------------------- ------------------- ------------------- ------------------- 2014/01/01 00:00:00 2013/11/01 00:00:00 2013/11/03 00:00:00 2013/11/02 19:00:00 2013/11/02 19:00:00 2013/11/02 18:59:00 BYS@bys1> select round(sysdate,'ss') as sss from dual; select round(sysdate,'ss') as sss from dual * ERROR at line 1: ORA-01899: b