【问题标题】:MS Access doesn't filter calculated field in Short Date formatMS Access 不过滤短日期格式的计算字段
【发布时间】:2021-02-24 02:38:17
【问题描述】:

在我的数据库中,我有一个包含以下计算的字段:

AD logon date: IIf([lastLogonDate]>[LLTConverted],[lastLogonDate],[LLTConverted])

我使用以下标准对其进行过滤:

<Date()-60

但是,当我运行查询时,它会显示过去 60 天内的日期。

在源文件中,lastLogonDate 和 LLTConverted 设置为短日期格式。 我尝试手动(通过属性)将 AD 登录日期字段的格式设置为短日期。我也尝试使用以下代码:

AD logon date: Format(IIf([lastLogonDate]>[LLTConverted],[lastLogonDate],[LLTConverted]),"dd/mm/yyyy")

此外,在属性表中,我将数据类型设置为带时间的日期。他们都没有工作。

我可以使用其他方法吗?

编辑:

过滤前的数据:

2021 年 8 月 1 日
30/09/2020
2020 年 6 月 24 日
17/06/2020
20/05/2020
17/06/2020
28/02/2020
2021 年 7 月 1 日
2020 年 10 月 9 日
2019 年 13 月 11 日
2021 年 7 月 1 日
01/06/2020
21/05/2020
25/05/2020
2021 年 8 月 1 日
2021 年 7 月 1 日
07/08/2020
18/02/2020
28/02/2020
25/06/2020
2020 年 7 月 10 日
2019 年 1 月 4 日
07/02/2020
28/11/2019
2020 年 10 月 28 日
18/02/2020
2020 年 7 月 10 日

过滤后:

2021 年 8 月 1 日
2021 年 7 月 1 日
2020 年 10 月 9 日
2021 年 7 月 1 日
01/06/2020
2021 年 8 月 1 日
2021 年 7 月 1 日
07/08/2020
2020 年 7 月 10 日
2019 年 1 月 4 日
07/02/2020
2020 年 7 月 10 日

【问题讨论】:

  • 为什么选择Excel标签?我对此进行了测试并过滤了作品。 Format() 函数产生一个字符串值,而不是一个真实的日期。编辑问题以显示示例未格式化数据。当您说“数据类型到日期与时间”时 - 我认为您的意思是格式,因为数据类型仍然是日期/时间。

标签: sql ms-access


【解决方案1】:

你把事情搞混了。 DateTime 值没有格式,只有一个值。

因此,如果字段 [lastLogonDate] 和 [LLTConverted] 为 true DateTime,则使用 Date()-60 进行过滤不会失败。

如果是这样,您的字段很可能是短文本,并且必须具有像 yyyy-mm-dd 这样的正确格式,并且必须在比较之前进行转换:

AD logon date: DateValue(IIf(DateValue([lastLogonDate]) > DateValue([LLTConverted]), [lastLogonDate], [LLTConverted]))

【讨论】:

  • 当我使用您建议的代码时,我收到错误:“标准表达式中的数据类型不匹配。”当我在另一个数据库中的 Excel 中使用相同的格式时,我可以在另一个数据库中使用相同的过滤器。我不知道它是否有帮助:在另一个数据库中,当我在设计视图中检查源表时,数据类型是日期/时间。我在 Excel 中对该表执行相同的操作,所以这很奇怪。我应该重新创建表吗?
  • 格式化仅用于显示。您看到的错误很可能源自 Null 值 - 但如果数据是 DateTime,则 DateValue 没有用。但是,您的过滤指示按文本“10 *”过滤文本值。此外,这似乎是一个查询;不知道 Excel 有没有发挥作用。
  • 我发现我应该在两个表之间使用 LEFT JOIN,而不是 INNER JOIN。使用 DateValue 的建议也有帮助,非常感谢!
  • 是否有同样的事情不适用于过滤器'Between Date() And Date()-60'的原因?错误消息是:“条件表达式中的日期类型不匹配”。结果我得到了更旧的日期。
  • 试试Between Date() And DateAdd('d', -60, Date())
【解决方案2】:

似乎还有另一种解决方案:如果我在原始 Excel 表中使用 INT 函数,那么它将值从日期 + 时间转换为日期。在Access中,那么我必须使用

IIf([lastLogonDate]&gt;[LLTConverted],[lastLogonDate],[LLTConverted])

而不是

DateValue(IIf(DateValue([lastLogonDate]) &gt; DateValue([LLTConverted]), [lastLogonDate], [LLTConverted])).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多