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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlanChen

您的鼓励是我创作的源泉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值