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

SQL中排除NULL值的工时计算方法优化求助

解决NULL值导致的工作时长计算错误问题

我明白你遇到的问题了——当数据库里的ZPZ_Von或ZPZ_Bis存在NULL值时,你的计算方法会把这些无效记录也算进去,导致结果偏离正确值。那些包含NULL的记录其实是不应该被纳入计算的,我们只需要在求和前先过滤掉这些无效条目就行。

修改后的C#方法

private TimeSpan CalculateWorkingHours(List<PRAESENZZEIT> arrivals)
{
    // 先过滤掉ZPZ_Von或ZPZ_Bis为NULL的记录,只保留能计算有效时长的条目
    var validEntries = arrivals.Where(x => x.ZPZ_Von != null && x.ZPZ_Bis != null);
    
    // 对有效记录计算单条时长的Ticks总和,再转换为TimeSpan
    return new TimeSpan(validEntries.Sum(x => (x.ZPZ_Bis.Value.TimeOfDay - x.ZPZ_Von.Value.TimeOfDay).Ticks));
}

关键修改点说明

  • 过滤无效记录:通过Where条件筛选出ZPZ_Von和ZPZ_Bis都不为NULL的条目,确保我们只处理有完整起始和结束时间的记录。
  • 安全访问属性:因为已经提前过滤了NULL值,所以可以安全地用.Value来访问DateTime属性的TimeOfDay,同时避免潜在的空引用异常。

这样修改后,计算时就会自动跳过那些包含NULL值的记录,得到你期望的正确结果(约6小时41分的TimeSpan)。

内容的提问来源于stack exchange,提问作者user9857941

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:15:16