高级java工程师 发表于 2013-1-14 08:57:29

oracle对日期进行操作

一下心血来潮,把部分Oracle对时间的一些处理,整理了一下,在这里分享一下(不足之处还请各位大牛指正)。--因为Oracle的默认时间格式为 dd-mon-yySQL> 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(sysdate-to_date('20100506','yyyy-mm-dd')) from dual;FLOOR(SYSDATE-TO_DATE('20100506','YYYY-MM-DD'))-----------------------------------------------                                          232--获取从当年1月1日至今有多少天SQL> select to_char(sysdate,'ddd') from dual;TO_---358--判断当前时间是上午还是下午SQL> select case when to_char(sysdate, 'hh24') >= 23 or to_char(sysdate, 'hh24') < 3 then '凌晨' when to_char(sysdate, 'hh24') >= 3 and to_char(sysdate, 'hh24') < 6 then '早晨' when to_char(sysdate, 'hh24') >= 6 and to_char(sysdate, 'hh24') < 8 then '上午' when to_char(sysdate, 'hh24') >= 8 and to_char(sysdate, 'hh24') < 11 then '中午' when to_char(sysdate, 'hh24') >= 11 and to_char(sysdate, 'hh24') < 13 then '下午' when to_char(sysdate, 'hh24') >= 13 and to_char(sysdate, 'hh24') < 17 then '傍晚' when to_char(sysdate, 'hh24') >= 17 and to_char(sysdate, 'hh24') < 19 then '晚上' when to_char(sysdate, 'hh24') >= 19 and to_char(sysdate, 'hh24') < 23 then '深夜' end from dual;CASE--查找某个时间段内有多少个星期一SQL> select count(1) from (select to_char(to_date('20101101', 'yyyy-mm-dd') + level, 'd') d from dual connect by level <= (select floor(to_date('20101201', 'yyyy-mm-dd') - to_date('20101101', 'yyyy-mm-dd')) from dual)) w where w.d=2;COUNT(1)----------         4--获取当前时间或指定时间是所在年的第几周SQL> select to_char(sysdate,'iw') from dual;TO--51
页: [1]
查看完整版本: oracle对日期进行操作