【问题标题】:Comparing dates in MS Access where date >= '1/1/2016'在 MS Access 中比较日期 >= '1/1/2016'
【发布时间】:2016-06-28 18:48:26
【问题描述】:

我知道这个问题已经被问过好几次了,但我认为这有点独特。 我有一个 MS Access 数据库,它有一个 DateTime 字段,我需要将其与日期 >= '1/1/2016' 或任何其他日期进行比较。

我的基本查询如下

SELECT TOP 100 DTime, PEvent, FName, LName FROM EventLogs

为了比较日期,我知道我必须做 WHERE Dtime >= #1/1/2016#

问题是,日期/时间比较是在我正在运行的另一个软件中自动输入的,因此无法更改语法。

SELECT TOP 100 DTime, PEvent, FName, LName FROM EventLogs WHERE DTime >= '1/1/2016'

整个 WHERE 子句是根据我指定为 DateTime 字段的字段自动输入的。

我尝试过的如下

SELECT TOP 100 CDate(Format([DTime], 'mm/dd/yyyy hh:nn:ss AM/PM')) AS LogTime, PEvent, FName, LName FROM EventLogs WHERE 'DTime' >= '1/1/2016'

这会返回结果,但遗憾的是它无法正确比较日期。有谁知道我怎么能做到这一点?任何帮助将不胜感激!

提前谢谢你

在 ODBC 连接中软件和数据库之间的连接,启用 ANSI 92。

【问题讨论】:

  • 所以为了澄清,这个位:DTime >= '1/1/2016' 是自动生成的,你不能编辑它?对吗?
  • 为什么'DTime' 在引号中?您能否扩展一下“问题是,日期/时间比较会自动输入到我正在运行的另一个软件中,因此无法更改语法。”方法?这是否意味着整个WHERE DTime >= '1/1/2016' 被添加到其他软件中?其他软件是什么?您是如何在其中进行查询的?
  • 正确,整个 'WHERE DTime >= '1/1/2016'' 语句由其他软件生成,无法编辑。只能编辑 WHERE 子句之前的语句。我认为专注于在 Access 中生成正确的输出而不是处理外部软件会更容易。因此,我需要始终使用WHERE DTime >= '1/1/2016' 创建正确的输出。
  • 不幸的是,WHERE DTime >= '1/1/2016' 在语法上不正确。如果你无法改变,那你就是一种 SOL。
  • 有没有办法编写SELECT语句来正确处理比较?连接到 MDB 文件的不同 ODBC 驱动程序怎么样?我现在正在使用带有系统 DSN 的 64 位 Access MDB 驱动程序。

标签: database ms-access ms-access-2010 ms-access-2013


【解决方案1】:

一条 SQL 语句永远是字符串,一个字符序列。它可以是 VBA 代码中的字符串变量或常量,也可以是查询对象的 SQL 属性。在任何情况下,它都可以在执行前被操纵: 在查询对象中:

MyQuery.SQL=Replace(MyQuery.SQL, "'", "#")
MyQuery.Execute

在 VBA 中:

Dim Dbs As DAO.Database
Set Dbs = CurrentDB 'Could also be: Set Dbs = OpenDatabase(DatabaseFileLocation)
Dbs.Execute Replace("SELECT TOP 100 DTime, PEvent, FName, LName FROM EventLogs WHERE DTime >= '1/1/2016'", "'", "#")

或者可能是:

Dbs.Execute "SELECT TOP 100 DTime, PEvent, FName, LName FROM EventLogs " & Replace("WHERE DTime >= '1/1/2016'", "'", "#")

思路是:如果 Access 可以运行,Access 可以预先对其进行修改。
如果未修改该语句,则该子句将在 String 值上完成,而不是在 DateTime 值上。

【讨论】:

  • 这些选项只是建议,可以以更适合您的系统的方式实现,只需按照最终的想法:如果 Access 可以运行它,Access 可以预先对其进行修改。
【解决方案2】:

正确,生成了整个 'WHERE DTime >= '1/1/2016'' 语句 其他软件无法编辑。

正如 Brad 已经评论的那样,这不是 Access SQL,因此永远不会工作。

您唯一的选择是将查询更改为 pass-through 查询,该查询将发送以下内容:

SELECT TOP 100 DTime, PEvent, FName, LName FROM EventLogs WHERE DTime >= '1/1/2016'

到理解语法的 SQL Server。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多