1、oracle支持对日期进行运算
2、日期运算时是以天为单位进行的
3、当需要以分秒等更小的单位算值时,按时间进制进行转换即可
4、进行时间进制转换时注意加括号,否则会出问题

trunc在时间运算中使用较多

select trunc(sysdate) from dual

oracle时间操作中1代表1天,可以转换成小时分等

trunc(sysdate)+1       当前时间+1天

trunc(sysdate)+1/24  当前时间加1/24天(一天24小时嘛),也就是1个小时

trunc(sysdate)+ 1 / (24*60) 把一天转化成24小时*60分钟,1/(24*60)也就是1分钟

那么你都会算了吧

,第一次看的时候真蛋疼。


1。上月末天:
SQL> selectto_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDayfrom
dual;

LASTDAY
----------
2005-05-31

2。上月今天
SQL> selectto_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday fromdual;

PRETODAY
----------
2005-05-21

3.上月首天
SQL> selectto_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDayfrom dual;

FIRSTDAY
----------
2005-05-01

4.按照每周进行统计
SQL> select to_char(sysdate,'ww') from dual group byto_char(sysdate,'ww');

TO
--
25

5。按照每月进行统计
SQL> select to_char(sysdate,'mm') from dual group byto_char(sysdate,'mm');

TO
--
06

6。按照每季度进行统计
SQL> select to_char(sysdate,'q') from dual group byto_char(sysdate,'q');

T
-
2

7。按照每年进行统计
SQL> select to_char(sysdate,'yyyy') from dual groupby to_char(sysdate,'yyyy');

TO_C
----
2005

8.要找到某月中所有周五的具体日期
select to_char(t.d,'YY-MM-DD') from (
select trunc(sysdate, 'MM')+rownum-1 as d
from dba_objects
where rownum < 32) t
where to_char(t.d, 'MM') = to_char(sysdate, 'MM')--找出当前月份的周五的日期

and trim(to_char(t.d, 'Day')) = '星期五'
--------
03-05-02
03-05-09
03-05-16
03-05-23
03-05-30 

 

9.当前月之前的3个月

select add_months(last_day(sysdate)+1,-4),add_months(last_day(sysdate),-1)  from dual