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

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

本文章某周第几天按照中国人习惯如第一天是星期一和第七天是星期日,其中星期一和星期日具体是那一天如哪年哪月哪日?

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;

select trunc(add_months(sysdate,-1),'mm') first_day,last_day(add_months(sysdate,-1)) last_day from dual;

你的查询应该这样写:

select from tabname where t between to_date('20130901','yyyymmdd') and to_date('20130930','yyyymmdd');

不建议在查询条件中写入变量,如

select from tabname where t between trunc(add_months(sysdate,-1),'mm') and last_day(add_months(sysdate,-1));

这其中sysdate是个变化的量,不建议使用。

select trunc(sysdate,'yyyy') - to_char(trunc(sysdate,'yyyy'),'d')-5 + :week 7 startweek,trunc(sysdate,'yyyy') - to_char(trunc(sysdate,'yyyy'),'d')+1 +:week 7 as endweek from dual;

:week 为第几周

1 前三个工作日

通过trade_f字段 减去当月的首日,然后按照它们之间的差排序,最小的前3个就是前三个工作日。

select to_date(to_char(日期字段,'yyyy/mm/dd'),'yyyy/mm/dd')-to_date('2010-05-01','yyyy/mm/dd') as trade_f

from CLNDR

where rownum <= 3

and trade_f = 1

order by trade_f

2最后一个工作日

思路与1一样,通过间差区最大的那一天

select to_date(to_char(日期字段,'yyyy/mm/dd'),'yyyy/mm/dd')-to_date('2010-05-01','yyyy/mm/dd') as trade_f

from CLNDR

where rownum = 1

and trade_f = 1

order by trade_f desc

试试下面语句:当天日期小于7月时取当年的第一天,当天日期大于6月时取7月的第一天。

select case when to_char(sysdate,'mm')<7 then trunc(sysdate,'YYYY') else

trunc(add_months(sysdate,-to_char(sysdate,'mm')+7),'mm') end from dual;

如果是where条件判断在这个时间段中

可以使用大于等于9月1号,小于9月2号,这样不就好理解了么?

where 日期字段 >= trunc(sysdate) and 日期字段 < trunc(sysdate + 1)

sysdate是获取当天,trunc是去掉日期的小时分秒。

大于等于,就包含着这个边界值,而小于,不包含右边界的值。

而如果一定要获得这个时间段,那么就要加工一下sysdate

select trunc(sysdate), to_date(to_char(sysdate,'yyyy-mm-dd')||'23:59:59', 'YYYY-MM-DD HH24:MI:SS') from dual

以上就是关于如何获Oracle 得某周的第一天和最后一天全部的内容,包括:如何获Oracle 得某周的第一天和最后一天、oracle中更改日期为本月最后一天、ORACLE 如何实现根据这一年的第N周 获取第N周的第一天,最后一天的具体日期各位高手,帮帮忙吧!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9728099.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存