【问题标题】:MS Access DateDiff Ambiguous Dates (Day Month order) Returning bad resultsMS Access DateDiff 模糊日期(日月顺序)返回错误结果
【发布时间】:2019-07-19 15:09:20
【问题描述】:
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-access datediff


【解决方案1】:

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

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

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

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

这是什么工作:

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

全部修复。

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

感谢大家的反馈!

【讨论】:

  • 其他 cmets 中的链接是否提供了洞察力?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 2012-07-12
  • 2019-11-22
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
相关资源
最近更新 更多