oracle存储过程:ORACLE储存过程_年日月统计
oracle 日期函数介绍: 
在oracle中有很多关于日期的函数,如: 
1、add_months()用于从一个日期值增加或减少一些月份 
date_value:=add_months(date_value,number_of_months) 
例: 
SQL> select add_months(sysdate,12) "Next Year" from dual;
Next Year 
---------- 
13-11月-04
SQL> select add_months(sysdate,112) "Last Year" from dual;
Last Year 
---------- 
13-3月 -13
SQL>
2、current_date()返回当前会放时区中的当前日期 
date_value:=current_date 
SQL> column sessiontimezone for a15 
SQL> select sessiontimezone,current_date from dual;
SESSIONTIMEZONE CURRENT_DA 
--------------- ---------- 
+08:00 13-11月-03
SQL> alter session set time_zone='-11:00' 
2 /
会话已更改。
SQL> select sessiontimezone,current_timestamp from dual;
SESSIONTIMEZONE CURRENT_TIMESTAMP 
--------------- ------------------------------------ 
-11:00 12-11月-03 04.59.13.668000 下午 -11: 
00
SQL>
3、current_timestamp()以timestamp with time zone数据类型返回当前会放时区中的当前日期 
timestamp_with_time_zone_value:=current_timestamp([timestamp_precision]) 
SQL> column sessiontimezone for a15 
SQL> column current_timestamp format a36 
SQL> select sessiontimezone,current_timestamp from dual;
SESSIONTIMEZONE CURRENT_TIMESTAMP 
--------------- ------------------------------------ 
+08:00 13-11月-03 11.56.28.160000 上午 +08: 
00
SQL> alter session set time_zone='-11:00' 
2 /
会话已更改。
SQL> select sessiontimezone,current_timestamp from dual;
SESSIONTIMEZONE CURRENT_TIMESTAMP 
--------------- ------------------------------------ 
-11:00 12-11月-03 04.58.00.243000 下午 -11: 
00
SQL>
4、dbtimezone()返回时区 
varchar_value:=dbtimezone 
SQL> select dbtimezone from dual;
DBTIME 
------ 
-07:00
SQL>
5、extract()找出日期或间隔值的字段值 
date_value:=extract(date_field from [datetime_value|interval_value]) 
SQL> select extract(month from sysdate) "This Month" from dual;
This Month 
---------- 
11
SQL> select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;
3 Years Out 
----------- 
2006
SQL>
6、last_day()返回包含了日期参数的月份的最后一天的日期 
date_value:=last_day(date_value) 
SQL> select last_day(date'2000-02-01') "Leap Yr?" from dual;
Leap Yr? 
---------- 
29-2月 -00
SQL> select last_day(sysdate) "Last day of this month" from dual;
Last day o 
---------- 
30-11月-03
SQL>
7、localtimestamp()返回会话中的日期和时间 
timestamp_value:=localtimestamp 
SQL> column localtimestamp format a28 
SQL> select localtimestamp from dual;
LOCALTIMESTAMP 
---------------------------- 
13-11月-03 12.09.15.433000 
下午
SQL> select localtimestamp,current_timestamp from dual;
LOCALTIMESTAMP CURRENT_TIMESTAMP 
---------------------------- ------------------------------------ 
13-11月-03 12.09.31.006000 13-11月-03 12.09.31.006000 下午 +08: 
下午 00
根据日期计算第几周:
//计算第几周 
public int GetWeekOfCurrDate(DateTime dt) 
{ 
int Week = 1; 
int nYear = dt.Year; 
System.DateTime FirstDayInYear = new DateTime(nYear, 1, 1); 
System.DateTime LastDayInYear = new DateTime(nYear, 12, 31); 
int DaysOfYear = Convert.ToInt32(LastDayInYear.DayOfYear); 
int WeekNow = Convert.ToInt32(FirstDayInYear.DayOfWeek) - 1; 
if (WeekNow < 0) WeekNow = 6; 
int DayAdd = 6 - WeekNow; 
System.DateTime BeginDayOfWeek = new DateTime(nYear, 1, 1); 
System.DateTime EndDayOfWeek = BeginDayOfWeek.AddDays(DayAdd); 
Week = 2; 
for (int i = DayAdd + 1; i <= DaysOfYear; i++) 
{ 
BeginDayOfWeek = FirstDayInYear.AddDays(i); 
if (i + 6 > DaysOfYear) 
{ 
EndDayOfWeek = BeginDayOfWeek.AddDays(DaysOfYear - i - 1); 
} 
else 
{ 
EndDayOfWeek = BeginDayOfWeek.AddDays(6); 
}
if (dt.Month == EndDayOfWeek.Month && dt.Day <= EndDayOfWeek.Day) 
{ 
break; 
} 
Week++; 
i = i + 6; 
} 
return Week; 
}
//本周是本年第几周 
private int DatePart(System.DateTime dt) 
{ 
int weeknow = Convert.ToInt32(dt.DayOfWeek);//今天星期几 
int daydiff = (-1) * (weeknow+1);//今日与上周末的天数差 
int days = System.DateTime.Now.AddDays(daydiff).DayOfYear;//上周末是本年第几天 
int weeks = days/7; 
if(days%7 != 0) 
{ 
weeks++; 
} 
//此时,weeks为上周是本年的第几周