如何获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;

你可能感兴趣的:(如何获Oracle 得某周的第一天和最后一天)