【问题标题】:Access SQL Date Format Inconsistent访问 SQL 日期格式不一致
【发布时间】:2018-01-08 17:01:22
【问题描述】:

我的数据库中目前有一个表,用于跟踪服务的开始日期和结束日期。我需要比较用户输入的日期,看看它是否在开始日期和结束日期之间。我现在的问题是,在表格中,访问开始日期为DD/MM/YYYY 的商店,我的表单中用户输入日期的文本框格式为DD/MM/YYYY。但是,一旦我点击 VBA 并运行 SQL 查询,它会将日期读取为MM/DD/YYYY

我的查询是:

SELECT * FROM table WHERE #09/01/2018# BETWEEN startDate AND endDate

我的测试条目是:

表:

startDate     endDate      service
08/01/2018    02/02/2018   ABC

这应该返回这个条目,但是当它读取为MM/DD/YYYY时它不会。如果我输入 #13/01/2018# 它会返回该条目,因为它检测到 13 是日期并且不能是一个月。我该如何纠正这个问题,以便它需要 09/01/2018 并返回条目?

【问题讨论】:

  • 您可以使用 Access 查询引擎可用的VBA's format function 以统一格式返回所有日期。示例:Format(<Date Field / Date Var>, "yyyymmdd").
  • 这很有趣,因为日期时间会遵循您计算机的区域设置。日期优先的区域应在所有 Access 对象中相应呈现:表、查询和模块。您的 date 字段可能是文本字段而不是日期时间。
  • 如果您使用 format() 命令将日期更改为字符串,那么这在许多情况下都不起作用。请参阅下面答案中的链接。

标签: mysql vba date ms-access


【解决方案1】:

如果这是一个 VBA 查询,那么您的观察结果是正确的。在查询设计器中,这些将按预期工作。

在此处查看 Allen Browne 的出色解释; http://allenbrowne.com/ser-36.html 也有解决方案。

【讨论】:

    【解决方案2】:

    您的查询应使用“反向”美国序列或 ISO 序列:

    SELECT * FROM table WHERE #2018/01/09# BETWEEN startDate AND endDate
    

    或者,如果您从代码构建它:

    SearchDate = SomeDateValue
    SQL = "SELECT * FROM table WHERE #" & Format(SearchDate, "yyyy\/mm\/dd") & "# BETWEEN startDate AND endDate"
    

    或者,如果您总是搜索今天:

    SQL = "SELECT * FROM table WHERE Date() BETWEEN startDate AND endDate"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多