日期:2014-05-16 浏览次数:20779 次
一下心血来潮,把部分Oracle对时间的一些处理,整理了一下,在这里分享一下(不足之处还请各位大牛指正)。 --因为Oracle的默认时间格式为 dd-mon-yy SQL> select sysdate from dual; SYSDATE -------------- 21-12月-10 --所以如果要修改一下时间格式可以有以下两种方 --修改当前会话的时间格式 SQL> alter session set nls_date_format = 'yyyy-mm-dd'; 会话已更改。 SQL> select sysdate from dual; SYSDATE ---------- 2010-12-21 --修改当前系统的时间格式(需要重启数据库) SQL> alter system set nls_date_format = 'yyyy-mm-dd' scope = spfile; 系统已更改。 SQL> select sysdate from dual; --还没有生效 SYSDATE -------------- 21-12月-10 --查询当前系统的时间格式 SQL> show parameter nls_date_format; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ nls_date_format string --查询当前时间 SQL> select sysdate from dual; SYSDATE ------------------- 2010-12-21 --在当前时间的基础上延迟10分钟,计算方式:1天除以24小时=1小时,1小时除以6分钟=10分钟。 SQL> select sysdate + 1/24/6 from dual; SYSDATE+1/24/6 ------------------- 2010-12-21 20:43:37 --在当前时间的基础上加一个月 SQL> select add_months(sysdate,1) from dual; ADD_MONTHS(SYSDATE, ------------------- 2011-01-21 20:36:00 --在当前时间的基础上减一个月 SQL> select add_months(sysdate,-1) from dual; ADD_MONTHS(SYSDATE, ------------------- 2010-11-21 20:37:05 --在当前时间见基础上加一年(减一年,参数为-12) SQL> select add_months(sysdate,12) from dual; ADD_MONTHS(SYSDATE, ------------------- 2011-12-21 20:40:26 --获取当前时间,是星期几,第二个查询,星期天=1,星期一=2,以此类推。 SQL> select to_char(sysdate,'day') from dual; TO_CHAR(S --------- 星期二 SQL> select to_char(sysdate,'d') from dual; T - 3 --获取某个日期是星期几 SQL> select to_char(to_date('2010-08-09','yyyy-mm-dd'),'day') from dual; TO_CHA ------ 星期一 --获取当前月的最第一天是星期几 SQL> select to_char(sysdate-to_number(to_char(sysdate,'dd')-1),'day') from dual; TO_CHAR(S --------- 星期三 --获取当前月的最后一天是星期几 SQL> select to_char(last_day(sysdate),'day') from dual; TO_CHAR(L --------- 星期五 SQL> select to_char(last_day(sysdate),'d') from dual; T - 6 --获取上个月的最第一天是星期几 SQL> select to_char(add_months(sysdate,-1)-to_char(sysdate-1,'dd'),'day') from dual; TO_CHAR(A --------- 星期一 SQL> select to_char(add_months(sysdate,-1)-to_char(sysdate-1,'dd'),'d') from dual; T - 2 --获取上个月的最后一天是星期几 SQL> select to_char(last_day(add_months(sysdate,-1)),'day') from dual; TO_CHAR(L --------- 星期二 SQL> select to_char(last_day(add_months(sysdate,-1)),'d') from dual; T - 3 --获取下个月的最第一天是星期几 SQL> select to_char(add_months(sysdate,1)-to_char(sysdate-1,'dd'),'day') from dual; TO_CHAR(A --------- 星期六 SQL> select to_char(add_months(sysdate,1)-to_char(sysdate-1,'dd'),'d') from dual; T - 7 --获取下个月的最后一天是星期几 SQL> select to_char(last_day(add_months(sysdate,1)),'day') from dual; TO_CHAR(L --------- 星期一 SQL> select to_char(last_day(add_months(sysdate,1)),'d') from dual; T - 2 --获取本周星期一的日期 SQL> select sysdate - to_char(sysdate -2,'d') from dual; SYSDATE-TO ---------- 2010-12-20 --获取本周星期天的日期 SQL> select sysdate + 7 - to_char(sysdate -1,'d') from dual; SYSDATE+7- ---------- 2010-12-26 --获取上周星期一的日期 SQL> select sysdate - 7 - to_char(sysdate -2,'d') from dual; SYSDATE-7- ---------- 2010-12-13 --获取上周星期天的日期 SQL> select sysdate - to_char(sysdate -1,'d') from dual; SYSDATE-TO ---------- 2010-12-19 --获取下周星期一的日期 SQL> select sysdate + 7 - to_char(sysdate -2,'d') from dual; SYSDATE+7- ---------- 2010-12-27 --获取下周星期天的日期 SQL> select sysdate + 7 + to_char(sysdate-2,'d') from dual; SYSDATE+7+ ---------- 2011-01-02 --获取当前月共有多少天 SQL> select to_char(last_day(sysdate),'dd') from dual; TO -- 31 --获取今年有多少天 SQL> select sum(to_char(last_day(add_months(sysdate,-to_char(sysdate,'mm')+level)),'dd')) from dual connect by level <= 12; SUM(TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,-TO_CHAR(SYSDATE,'MM')+LEVEL)),'DD')) ----------------------------------------- 365 --获取本月的最后一天 SQL> select last_day(sysdate) from dual; LAST_DAY(S ---------- 2010-12-31 --计算两个时间的差 SQL> select floor