如何获Oracle 得某周的第一天和最后一天

如题所述

本文章某周第几天按照中国人习惯如第一天是星期一和第七天是星期日,其中星期一和星期日具体是那一天如哪年哪月哪日?
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;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-04-01
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;本回答被网友采纳