Oracler读取各种格式的相关日期格式

CREATE OR REPLACE Package Pkg_Stm_Date As
    --Purpose:相关日期处理功能包
    
    --获取某一天是第几周
    Function Fn_GetWeekbyDate(P_Date Varchar2) Return Varchar2;

    --获取某一天是第几周
    Function Fn_GetWeekbyDate(P_Date Date) Return Varchar2;

    --获取某一天是周几
    Function Fn_GetWeekDaybyDate(P_Date Varchar2) Return Varchar2;

    --获取某一天是周几
    Function Fn_GetWeekDaybyDate(P_Date Date) Return Varchar2;
    
    --获取该日期所在的周是单周还是双周
    Function Fn_GetWeekTypeByDate(P_Date Varchar2) Return Pls_Integer;
    
    --根据查询日期,获取该日期所在的星期的星期一对应的日期
    Function Fn_GetMonDayByDate(P_Date Varchar2) Return Varchar2;   
   
    --获取连续的日期列表,返回游标类型
    Function Fn_GetDateList(P_StartDate Varchar2, P_EndDate Varchar2) Return Sys_refcursor;
   
    --获取连续的日期列表,返回结果集
    Function Fn_GetDateTable(P_StartDate Varchar2, P_EndDate Varchar2) Return TblTyp_Var Pipelined;
   
    --获取当天日期
    Function Fn_GetCurrentDate Return Varchar2;
    
    --获取当前日期和时间
    Function Fn_GetCurrentDateTime Return Varchar2;
    
    --获取数字型当前日期和时间
    Function Fn_GetNumbericCurrentDateTime Return Varchar2;
      
    --获取当年的第一天
    Function Fn_GetCurrentYearStartDate Return Varchar2;
   
    --获取当年的最后一天
    Function Fn_GetCurrentYearEndDate    Return Varchar2;
    
    --获取当前时间
    Function Fn_GetCurrentTime Return Varchar2;
End Pkg_Stm_Date;


CREATE OR REPLACE Package Body Pkg_Stm_Date As
   --Author:chenqingchang
   --Purpose:相关日期处理功能包

    --获取某一天是第几周
    Function Fn_GetWeekbyDate(P_Date Varchar2) Return Varchar2
    Is
    Begin
        Return To_char(To_Date(P_Date,'yyyy-mm-dd'),'fmiw');
    End Fn_GetWeekbyDate;

    --获取某一天是第几周
    Function Fn_GetWeekbyDate(P_Date Date) Return Varchar2
    Is
    Begin
        Return To_Char(P_Date,'fmiw');
    End Fn_GetWeekbyDate;

    --获取某一天是周几
    Function Fn_GetWeekDaybyDate(P_Date Varchar2) Return Varchar2
    Is
    Begin
        Return to_char(To_Date(P_Date,'yyyy-mm-dd'),'day','nls_date_language=''simplified chinese''');
    End Fn_GetWeekDaybyDate;

    --获取某一天是周几
    Function Fn_GetWeekDaybyDate(P_Date Date) Return Varchar2
    Is
    Begin
        Return to_char(P_Date,'day','nls_date_language=''simplified chinese''');
    End Fn_GetWeekDaybyDate;
    
    --获取该日期所在的周是单周还是双周
    Function Fn_GetWeekTypeByDate(P_Date Varchar2) Return Pls_Integer
    Is
    Begin
        Return Mod(Pkg_Stm_Date.Fn_GetWeekbyDate(P_Date), 2); 
    End Fn_GetWeekTypeByDate;
   
    --根据查询日期,获取该日期所在的星期的星期一对应的日期
    Function Fn_GetMonDayByDate(P_Date Varchar2) Return Varchar2
    Is
        L_MonDayByDate Varchar2(19);
    Begin
        Select to_char(trunc(to_date(P_Date,'yyyy-mm-dd'),'iw') ,'yyyy-mm-dd')
        Into 
        L_MonDayByDate
        From dual;
        
        Return L_MonDayByDate;
    End Fn_GetMonDayByDate;
   
    --获取日期列表,返回游标类型
    Function Fn_GetDateList(P_StartDate Varchar2, P_EndDate Varchar2) Return Sys_refcursor 
    Is
       L_CurDate Sys_refcursor;
	   
    Begin
		Open L_CurDate For
		Select  TO_DATE(P_StartDate, 'YYYY-MM-DD') + NUMTODSINTERVAL(Level, 'day') thisDate  
		From  dual
		Connect By Level <= To_Date(P_EndDate,'yyyy-mm-dd') - To_Date(P_StartDate, 'yyyy-mm-dd');      
					 
		Return  L_CurDate;  
    End  Fn_GetDateList;
   
    --返回日期列表,以表数据方式显示可以进行表关联
    Function Fn_GetDateTable(P_StartDate Varchar2, P_EndDate Varchar2) Return TblTyp_Var Pipelined
    Is
        L_StartDate Varchar2(20) := '';
    Begin        
        Select to_Char(to_Date(P_StartDate,'yyyy-mm-dd') - 1,'yyyy-mm-dd')
        Into L_StartDate 
        From dual;

		For dateRow In 
		(
		    Select TO_DATE(L_StartDate, 'yyyy-mm-dd') + NUMTODSINTERVAL(Level, 'day') thisDate
			From dual
			Connect By Level <= To_Date(P_EndDate,'yyyy-mm-dd') - To_Date(L_StartDate, 'yyyy-mm-dd')
		) loop
		    Pipe Row(to_char(dateRow.thisDate,'yyyy-mm-dd'));
		End Loop;
		
		Return;   
    End Fn_GetDateTable;
   
    --获取当天日期
    Function Fn_GetCurrentDate Return Varchar2
    Is
	    L_CurrentDate Varchar2(19);	      
    Begin
		Select to_char(SysDate,'yyyy-MM-dd') 
		Into L_CurrentDate 
		From dual;
	     
        Return L_CurrentDate;
    End Fn_GetCurrentDate;   
    
    --获取当前日期和时间
    Function Fn_GetCurrentDateTime Return Varchar2
    Is
    Begin
        Return To_Char(SysDate, 'yyyy-mm-dd hh:mm:dd');    
    End Fn_GetCurrentDateTime;
    
    --生成数字型的当前日期和时间
    Function Fn_GetNumbericCurrentDateTime Return Varchar2
    Is
    Begin
        Return Replace(Replace(Pkg_Stm_Date.Fn_GetCurrentDateTime(),'-', ''),':', '');
    End Fn_GetNumbericCurrentDateTime;    
   
    --获取当年的第一天
    Function Fn_GetCurrentYearStartDate Return Varchar2
    Is
        L_CurrentYearStartDate Varchar2(19);
    Begin
        Select to_Char(trunc(SysDate,'yyyy'),'yyyy-mm-dd') 
        Into L_CurrentYearStartDate
        From dual;
       
        Return L_CurrentYearStartDate;
    End Fn_GetCurrentYearStartDate;
  
    --获取当年的最后一天
    Function Fn_GetCurrentYearEndDate	Return Varchar2 
    Is
        L_CurrentYearEndDate Varchar2(19);
    Begin
       Select to_char(add_months(trunc(sysdate,'yyyy'),12) - 1,'yyyy-mm-dd') 
       Into L_CurrentYearEndDate
       From dual; 
       
       Return L_CurrentYearEndDate;
    End Fn_GetCurrentYearEndDate;
    
    --获取当前时间
    Function Fn_GetCurrentTime Return Varchar2
    Is
    Begin
        Return To_Char(SysDate,'HH24:MI:SS'); 
    End Fn_GetCurrentTime;
    
End Pkg_Stm_Date;



     


posted @ 2014-01-03 09:41  wala-wo  阅读(191)  评论(0编辑  收藏  举报