Cognos计算两日期间隔剔除周日且次日为计数首日的方法求助
Cognos剔除周日且从起始日次日起算的天数计算方案
你之前的逻辑是按剔除周六周日(每周5个工作日)设计的,不符合仅剔除周日的需求,以下是修正后的可用方案:
对齐规则
- 计数区间:起始日次日到结束日,包含两端日期
- 排除规则:仅剔除区间内的周日,周六正常计入
- 异常处理:结束日早于/等于起始日时返回0
可直接使用的Cognos表达式
CASE WHEN cast([Finish] as date) <= cast([Start] as date) THEN 0 ELSE -- 整周部分:每满7天计6天(仅扣除1个周日) 6 * ( _days_between(cast([Finish] as date), cast([Start] as date) + 1) - _day_of_week(cast([Finish] as date), 1) + _day_of_week(cast([Start] as date) + 1, 1) ) / 7 -- 不满整周的零散天数计算 + max( 0, min(_day_of_week(cast([Finish] as date), 1), 6) - max(_day_of_week(cast([Start] as date) + 1, 1), 1) + 1 ) END
逻辑说明
- 先将计数起点统一调整为起始日次日,避免单独处理偏移逻辑
_day_of_week使用参数1,返回值规则为:周一=1,周二=2……周六=6,周日=7- 整周部分计算区间内的完整周数量,每完整周固定计6个有效天
- 零散天数计算时,将周日的返回值截断为6,自动过滤掉区间首尾的周日
验证示例
- 示例1:起始日为周一,结束日为当周周五,计数区间为周二到周五无周日,返回有效天数4
- 示例2:起始日为周六,结束日为下周一,计数区间为周日、周一,剔除周日后返回有效天数1
- 示例3:起始日为周日,结束日为下周日,计数区间为周一到下周日,剔除1个周日返回有效天数6
内容的提问来源于stack exchange,提问作者SFillin
相关产品推荐
相关产品推荐

