在 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'的主要内容,如果未能解决你的问题,请参考以下文章