重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
~~~
成都创新互联公司主营弥渡网站建设的网络公司,主营网站建设方案,手机APP定制开发,弥渡h5微信小程序开发搭建,弥渡网站营销推广欢迎弥渡等地区企业咨询
1、获取当天是礼拜几:selectto_char(sysdate,'d')fromdual;--礼拜天为1,礼拜一为2,类推
2、获取 两个时间段间的 工作日:
select(trunc(end_dt - start_dt) -
((case
WHEN(8- to_number(to_char(start_dt,'D'))) trunc(end_dt - start_dt) +1THEN0
ELSE
trunc((trunc(end_dt - start_dt) -
(8- to_number(to_char(start_dt,'D'))))/7) +1END) +
(case
WHENmod(8- to_char(start_dt,'D'),7) trunc(end_dt - start_dt) -1THEN0
ELSE
trunc((trunc(end_dt - start_dt) - (mod(8- to_char(start_dt,'D'),7) +1))/7) +1END)))
asworkingdays
fromdual
下面的sql可以直接运行:
select(trunc(to_date('2010-11-11','yyyy-mm-dd') -to_date('2010-11-07','yyyy-mm-dd')) -
((case
WHEN(8- to_number(to_char(to_date('2010-11-07','yyyy-mm-dd'),'D'))) trunc(to_date('2010-11-11','yyyy-mm-dd') -to_date('2010-11-07','yyyy-mm-dd')) +1THEN0
ELSE
trunc((trunc(to_date('2010-11-11','yyyy-mm-dd') -to_date('2010-11-07','yyyy-mm-dd')) -
(8- to_number(to_char(to_date('2010-11-07','yyyy-mm-dd'),'D'))))/7) +1END) +
(case
WHENmod(8- to_char(to_date('2010-11-07','yyyy-mm-dd'),'D'),7) trunc(to_date('2010-11-11','yyyy-mm-dd') -to_date('2010-11-07','yyyy-mm-dd')) -1THEN0
ELSE
trunc((trunc(to_date('2010-11-11','yyyy-mm-dd') -to_date('2010-11-07','yyyy-mm-dd')) - (mod(8- to_char(to_date('2010-11-07','yyyy-mm-dd'),'D'),7) +1))/7) +1END)))
asworkingdays
fromdual
~~~
怎么在oracle中,计算出任意日期之间的工作日天数
=NETWORKDAYS(A10,B10),
A10起始日期,B10结束日期,这个只能计算双休.
select count(id),sum(case when day='星期一' or day='星期二' or day='星期三' or day='星期四' or day='星期五' then 1 else 0 end) 工作日,sum(case when day='星期六' or day='星期日' then 1 else 0 end) 周末 from table
另外:我发现你的表中有重复值啊,这个怎么算,不管么?还是要去重?这张表(我说的是例子)似乎有点问题。
还应该由其他写法,暂时就想起这一种来。