You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:40:04