Informatica中XQuery计算两日期工作日结果错误的排查与解决
问题分析与解决方案
核心错误
你代码中的关键问题是误用了日期函数:fn:day-from-date() 返回的是当月的日期数值(比如2024-10-25会返回25),而非星期几。你写的 lt 6 实际上是在筛选当月1-5号的日期,这就是为什么结果只有5天,完全偏离了工作日计算的逻辑。
正确的工作日判断方式
要判断某一天是否为工作日,应该使用 fn:day-from-weekday($day) 函数,它返回的是星期几的数字:
- 1 = 周一
- 2 = 周二
- ...
- 5 = 周五
- 6 = 周六
- 7 = 周日
因此,工作日的判断条件应为 fn:day-from-weekday($day) <= 5。
修正后的代码
求和版
fn:sum( for $j in 0 to fn:days-from-duration(xs:date($temp.t_laatsteLeverDatum) - fn:current-date()) let $day := fn:current-date() + xs:dayTimeDuration(concat('P', $j, 'D')) return if (fn:day-from-weekday($day) <= 5) then 1 else 0 )
计数版
fn:count( for $i in 0 to fn:days-from-duration(xs:date($temp.t_laatsteLeverDatum) - fn:current-date()) let $day := fn:current-date() + xs:dayTimeDuration(concat('P', $i, 'D')) where fn:day-from-weekday($day) <= 5 return $day )
结果验证
以你的测试场景(当前日期2024-10-25,交付日期2024-11-06)为例:
- 总包含日期共13天(含首尾)
- 其中周末为10.26、10.27、11.2、11.3,共4天
- 工作日数量为13-4=9天,与预期一致,修正后的代码会返回正确结果。
内容的提问来源于stack exchange,提问作者Aad Dijksman
相关产品推荐
相关产品推荐

