如果你对当前系统的日期格式看这不舒服,可以修改当前会话的显示格式
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
这是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>
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
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 因为round不能处理字符型数据,所以报错,我们要将字符型数据转换为日期型 idle> select round(to_date(‘2010-10-10‘),‘MONTH‘) from dual; ROUND(TO_DATE( ------------------- 2010-10-01 00:00:00 这是按月为单位进行四舍五入 因为10号是16号以前 所以得到10.1日 月为单位的四舍五入的分割线 idle> select round(to_date(‘2010-10-15‘),‘MONTH‘),trunc(to_date(‘2010-10-15‘)) from dual; ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010 ------------------- ------------------- 2010-10-01 00:00:00 2010-10-15 00:00:00 idle> select round(to_date(‘2010-10-16‘),‘MONTH‘),trunc(to_date(‘2010-10-16‘)) from dual; ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010 ------------------- ------------------- 2010-11-01 00:00:00 2010-10-16 00:00:00 idle> 年为单位的四舍五入分割线 idle> select round(to_date(‘2010-06-30‘),‘year‘),trunc(to_date(‘2010-06-30‘),‘year‘) from dual; ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010 ------------------- ------------------- 2010-01-01 00:00:00 2010-01-01 00:00:00 idle> select round(to_date(‘2010-07-01‘),‘year‘),trunc(to_date(‘2010-07-01‘),‘year‘) from dual; ROUND(TO_DATE(2010 TRUNC(TO_DATE(2010 ------------------- ------------------- 2011-01-01 00:00:00 2010-01-01 00:00:00 idle>
RR与 YY的区别
SQL> select to_date(‘18-may-91‘,‘DD-MON-RR‘) FROM DUAL; TO_DATE(‘18-MAY-91‘ ------------------- 1991-05-18 00:00:00 SQL> select to_date(‘18-may-91‘,‘DD-MON-YY‘) FROM DUAL; TO_DATE(‘18-MAY-91‘ ------------------- 2091-05-18 00:00:00 SQL>
原文地址:https://www.cnblogs.com/marxist/p/11708150.html
时间: 2024-10-11 03:31:46