oracle: 给定起始日期,按月份统计两个日期间每个月份的工作日(非周六周天)的天数,谢谢

oracle: 给定起始日期,按月份统计两个日期间每个月份的工作日(非周六周天)的天数,谢谢,第1张

with t1 as (select to_date('20130909','yyyymmdd')+level-1 ymd

from dual

connect by level<=to_date('20131209','yyyymmdd')-to_date('20130909', 'yyyymmdd')+1)

,t2 as (select to_char(ymd, 'yyyymm') ym, to_char(ymd, 'd') d, ymd from t1)

select ym,count(d) from t2

where d<>1 and d<>6

group by ym

有几周,把每个月的最后一天拼成串传到如下SQL:

select to_char(to_date('20111031','yyyymmdd'),'w') from dual;

每周日期段没找到直接的,可以自己写个函数:

1、获取1号是周几,如周4;

2、则1-4号为第一周,即1号+(7-4)天=4号;

3、循环:4+1=5号——4+7=11号为第二周;

直到:某周加完后的日期,大于该月的最大天数,则取该月最大天数收尾,循环结束;

第二种方法是你建个存日期的表:

date week

……

20110101

20110102

……

里面存N年的日期,然后根据

select to_char(to_date('20111031','yyyymmdd'),'w') from dual; 把week字段update进去;

然后直接根据这张表写SQL就直接获取几周,每周是几号到几号了。。。

你好:当前的话,还没有现成的方法来求一个月上班的天数的,

实现思路是你可以默认周末两天都休息,然后求出一个月的总天数,和周末的天数,之后做个减法,然后可以在页面上手动控制那些天是节假日,然后那些天来补班。之后再算出一个结果作为最终的结果。

select

a工号,

a姓名,

sum(b事假天数),

'' 病假天数

from A001 a,A810 b

where aemployee_id=bemployee_id

b事假天数<>0

grooup by a工号,a姓名;

union all

select

a工号,

a姓名,

'' 事假天数,

sum(b病假天数)

from A001 a,A810 b

where aemployee_id=bemployee_id

b病假天数<>0

grooup by a工号,a姓名;

相差的天数用months_between()函数

exp:SQL>select months_between(sysdate,to_date('2015-08-08','yyyy-mm-dd')) from dual;

没有求相差的月数函数,还有后面那句"天数取的是月数抛开后的零头"我没看懂

1获取系统的当前时间

date类型的:

selectsysdatefromdual;

2char类型的:

selectto_char(sysdate,'yyyy-mm-ddhh24:mi:ss')fromdual;

3函数在ORACLE中获取年、季度、月、周、日的时间

selectto_char(sysdate,'yyyy')fromdual;--年

selectto_char(sysdate,'MM')fromdual;--月

selectto_char(sysdate,'dd')fromdual;--日

selectto_char(sysdate,'Q')fromdual;--季

selectto_char(sysdate,'iw')fromdual;--周--按日历上的那种,每年有52或者53周

4日期 *** 作,如下图

当前时间减去7分钟的时间

selectsysdate,sysdate-interval'7'MINUTEfromdual;

当前时间减去7小时的时间

selectsysdate-interval'7'hourfromdual;

当前时间减去7天的时间

selectsysdate-interval'7'dayfromdual;

当前时间减去7月的时间

selectsysdate,sysdate-interval'7'monthfromdual;

当前时间减去7年的时间

selectsysdate,sysdate-interval'7'yearfromdual;

时间间隔乘以一个数字

selectsysdate,sysdate-8interval'7'hourfromdual;

SELECT TRUNC( SYSDATE, 'YYYY' ) FROM DUAL

可以获取 今年的 1月1号

那么, 如果你知道天数, 就是

SELECT TRUNC( SYSDATE, 'YYYY' ) + 今年的第几天 - 1 FROM DUAL

以上就是关于oracle: 给定起始日期,按月份统计两个日期间每个月份的工作日(非周六周天)的天数,谢谢全部的内容,包括:oracle: 给定起始日期,按月份统计两个日期间每个月份的工作日(非周六周天)的天数,谢谢、如何从oracle中查到每个月中有几周,每周的日期段从几号到几号、oracle怎样求一个月的应上班天数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9671521.html

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

发表评论

登录后才能评论

评论列表(0条)

保存