在 MS Access 中比较日期 >= '1/1/2016'

Posted

技术标签:

【中文标题】在 MS Access 中比较日期 >= \'1/1/2016\'【英文标题】: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 驱动程序。 【参考方案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。

【讨论】:

以上是关于在 MS Access 中比较日期 >= '1/1/2016'的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2016 - 比较同一表中的日期

Ms Access 查询中的日期过滤(有趣)

access有效性规则 日期的比较 问题

ms-access:仅显示特定日期内记录的报告

MS Access 按日期累积总和?

MS-Access 中的多个日期范围