首页 > 解决方案 > MS Access DateDiff 模糊日期(日月顺序)返回错误结果

问题描述

tblDurations
  TaskID : Number
  Assigned Date : Date/Time
  Start Date : Date/Time
  End Date : Date/Time

SELECT TaskID,
  Count(TaskID) As [Task Count],
  Min(Nz([Start Date], [Assigned Date])) as [Min of Start Date],
  Max([End Date]) as [Max of End Date],
  DateDiff("d", Min(Nz([Start Date], [Assigned Date])), Max([End Date])) + 1 as [Date Range]
  FROM tblDurations
  GROUP BY TaskID

输出:

TaskID  Task Count Min of Start Date Max of End Date Date Range
1       3          16/08/2018        10/01/2019      1
2       2           4/09/2017        07/09/2017      4
3       3          13/09/2017        08/01/2018      118

我得到了如第 1 行(TaskID = 1)所示的偶尔行,它应该等于 148!

经过大量检查后,我确定这发生在模棱两可的日期上。我的意思是,日期和月份的值可能会相互混淆。

我在澳大利亚,日期格式是 dd/mm/yyyy。但是我相信 datediff 函数会混淆日期和月份的顺序并返回零(加上我的 1 = 1)。

我该如何克服这个问题?

标签: ms-accessdatediff

解决方案


问题不在于模棱两可的日期。仔细观察,我发现各种明确的日期返回错误的值。

问题是使用了我这样使用的 Nz 函数:

Min(NZ([开始日期], [分配日期]))

我的意思是取任一开始日期的最小值,但如果开始日期为 NULL,则指定日期的最小值。

什么工作是这样的:

Nz(Min([StartDate], Min(Assigned Date))

都修好了。

这就引出了问题。为什么只是有时?因为它与开始日期为 NULL 或非 NULL 无关。

感谢大家的反馈!


推荐阅读