十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
适用于SQL上下文环境
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了瀍河免费建站欢迎大家使用!
去掉的是周六/7,周日/1两天周末
具体SQL如下、这是避免日期格式本地化的版本
select count(1) from (
select to_char(TO_DATE('2016-12-24','yyyy-MM-dd') - level, 'd') DOW
from dual
connect by level = trunc(TO_DATE('2016-12-24','yyyy-MM-dd') - TO_DATE('2016-11-19','yyyy-MM-dd'))
) where DOW not in (7, 1);
总结:
第一层查询是通过connect by level生成两个日期间的天数行
其中to_char(,'d')DOW字段返回的是周几的对应1~7的数字
第二层查询就是去掉周六周日然后count天数
以2015年12月1日至2015年12月31日为例。其中周六和周日算周末。
查询除周末以外的天数(oracle中以周日为1,周一为2……周六为7),可用如下语句:
with t as
(select rownum-1 rn from dual connect by rownum=100)
select count(*) from t
where to_char(to_date('2015-12-01','yyyy-mm-dd')+rn,'yyyy-mm-dd') between '2015-12-01' and '2015-12-31'
and to_char(to_date('2015-12-01','yyyy-mm-dd')+rn,'d') not in (6,7);
查询结果:
查日历可得,2015年12月1日至2015年12月31日期间,周六周日的天数合计8天,31-8=23,与语句所得结果一致。
select count(*) from ( select rownum rnum from all_objects where rownum = to_date('1') - to_date('2')+1 )
where to_char( to_date('2')+rnum-1, 'DAY' ) not in ( '星期六', '星期日' )
1、注意你数据库的NLS_TERRITORY,你可以需要根据这个替换语句中的'星期六', '星期日' 这部分。
2、注意,在我的例子中我使用了all_objects这个视图,你可以使用任意表,但须确认表要有足够的行数,也就是说日期差1年,表至少要有366行,日期差10年,表至少要有3660行。