æ¬æç« æå¨ç¬¬å 天æç
§ä¸å½äººä¹ æ¯å¦ç¬¬ä¸å¤©æ¯ææä¸å第ä¸å¤©æ¯æææ¥ï¼å
¶ä¸ææä¸åæææ¥å
·ä½æ¯é£ä¸å¤©å¦åªå¹´åªæåªæ¥ï¼
1.æ±åºæ¬ææç第ä¸å¤©æ¥æï¼ä»¥ææä¸ä¸ºç¬¬ä¸å¤©ï¼ 请è¾å
¥å ä½ç¬¦
select trunc(sysdate,'DD')-to_char(sysdate,'D')+2-(to_number(to_char(sysdate,'IW'))-&week)*7 from dual;
2.æ±åºæ¬ææç第ä¸å¤©æ¥æï¼ä»¥æææ¥ä¸ºç¬¬ä¸å¤©ï¼
select trunc(sysdate,'DD')-to_char(sysdate,'D')+8-(to_number(to_char(sysdate,'IW'))-&week)*7 from dual;
è¡¥å
å®æ´æå¹´ç第å å¨ç第1天åæåä¸å¤©ã
/*
è·å¾æå¹´æå¨ç第ä¸å¤©
P_YEAR Number --年份
P_WEEKLY Number --第å å¨
X_START_DATE Date --æå¨ç第ä¸å¤©
X_END_DATE Date --æå¨çæåä¸å¤©
*/
procedure getWeeklyDateRang(P_YEAR Number,
P_WEEKLY Number,
X_START_DATE In Out Date,
X_END_DATE In Out Date) Is
v_Year Number := P_YEAR; --è¾å
¥å¹´ä»½
v_Weekly Number := P_WEEKLY; --第å 第
v_CurrData Date := Trunc(Sysdate);
v_CurrWeekly Number := To_Number(To_Char(v_CurrData, 'IW'));
v_DiffYear Number;
v_WeeklyStart Date; --æå¨ç¬¬ä¸å¤©
v_WeeklyEnd Date; --æå¨æåä¸å¤©
Begin
v_DiffYear := To_Number(To_Char(v_CurrData, 'YYYY')) - v_Year;
If (v_Weekly > v_CurrWeekly And v_DiffYear >= 0) Then
v_CurrWeekly := v_CurrWeekly + (v_DiffYear + 1) * 52;
End If;
v_WeeklyStart := (trunc(v_CurrData, 'DD') - to_char(v_CurrData, 'D') + 1 -
(v_CurrWeekly - v_Weekly) * 7) ;
v_WeeklyEnd := (trunc(v_CurrData, 'DD') - to_char(v_CurrData, 'D') + 7 -
(v_CurrWeekly - v_Weekly) * 7) ;
X_START_DATE := v_WeeklyStart;
X_END_DATE := v_WeeklyEnd;
End getWeeklyDateRang;
温馨提示:答案为网友推荐,仅供参考