富阳营销型网站建设,公众号商城制作价格,wordpress 有市场吗,广州最好的商城网站制作SQL编写判断是否为工作日函数编写 最近的自己在写一些功能,遇到了对于工作日的判断,我就看了看sql,来吧!~(最近就是好疲惫) 我们一起看看(针对ORACLE)
1.声明:
CREATE OR REPLACE PACKAGE GZYW_2109_1214.PKG_FUN_GETDAY_HDAY AS /** * 通过节假日代码获取指定的日期[查找基…SQL编写判断是否为工作日函数编写 最近的自己在写一些功能,遇到了对于工作日的判断,我就看了看sql,来吧!~(最近就是好疲惫) 我们一起看看(针对ORACLE)
1.声明:
CREATE OR REPLACE PACKAGE GZYW_2109_1214.PKG_FUN_GETDAY_HDAY AS /** * 通过节假日代码获取指定的日期[查找基准日期前/后N自然/工作日的日期] * 注此函数只适用于节假日表中只保存了节假日日期非工作日记录的情况 , * 警告若没有设置范围内的节假日信息此函数会计算出错误的返回日期 * _Stand_Date 基准日期, * C_MKT_Code 节假日代码, * N_Interval_Day 间隔天数(大于0向后查找,小于0向前查找,等于0返回基准日期), * C_Type 日期类型 W工作日,D自然日,DW自然日递延至工作日 */ Function GETDAY_HDAY(C_HDay_Code varchar2,D_Stand_Date date,N_Interval_Day int,C_Type varchar2) return Date; END PKG_FUN_GETDAY_HDAY;2.主体
CREATE OR REPLACE PKG_FUN_GETDAY_HDAY AS Function getDay_HDay(C_HDay_Code varchar2, D_Stand_Date date, N_Interval_Day int, C_Type varchar2) return Date as D_Return Date; /*返回的日期*/ D_Start Date; /*区间开始日期*/ D_End Date; /*区间结束日期*/ D_Tmp Date; N_Count int : 1; C_Hday varchar2(20) : C_HDay_Code; begin D_Return : D_Stand_Date; /*判断参数是否合法*/ if ((W ! C_Type) AND (D ! C_Type) and (DW ! C_Type)) then return D_Return; else if ((D C_Type) or (DW C_Type)) then D_Return : D_Stand_Date N_Interval_Day; else /*工作日的推算*/ D_Start : D_Stand_Date; D_End : D_Stand_Date N_Interval_Day; D_Return : D_End; while (true) loop exit when N_Count 0; begin if (N_Interval_Day 1) then select /*RESULT_CACHE*/ count(*) into N_Count from T_P_BI_HDAY_SUB a where a.C_HDay_Code C_Hday and a.D_HDay D_Start and a.D_HDay D_End and a.c_Date_Type H and a.N_Check_State 1; if (N_Count 0) then D_Start : D_End; D_End : D_End N_Count; D_Return : D_End; else exit; /*退出*/ end if; else /*如果是逆序*/ if (D_Start D_End) then D_Tmp : D_End; D_End : D_Start; D_Start : D_Tmp; end if; select /*RESULT_CACHE*/ count(*) into N_Count from T_P_BI_HDAY_SUB a where a.C_HDay_Code C_Hday and a.D_HDay D_Start and a.D_HDay D_End and a.c_Date_Type H and a.N_Check_State 1; if (N_Count 0) then D_End : D_Start; D_Start : D_End - N_Count; D_Return : D_Start; else exit; /*退出*/ end if; end if; end; end loop; end if; if (DW C_Type) and (N_Interval_Day0) then N_Count:1; while (true) loop exit when N_Count 0; select /*RESULT_CACHE*/ count(*) into N_Count from T_P_BI_HDAY_SUB a where a.C_HDay_Code C_Hday and a.D_HDay D_Return and a.c_Date_Type H and a.N_Check_State 1; if N_Count!0 then D_Return:D_Return1; end if; end loop; end if; end if; return D_Return; end; END PKG_FUN_GETDAY_HDAY;
3.检验 CN:基准日期(以哪个国家进行注明) DATE ‘2023-10-08’:你要检验的日期 -1:代表去取前一日日期 ‘W’:只取前面‘-1’也就是前一日的工作日 SELECT PKG_FUN_GETDAY_HDAY.GETDAY_HDAY(CN, DATE 2023-10-08, -1, W) AS TEST_DATA FROM TEST_TABLE a WHERE ROWNUM2;运行结果: