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

时间:2016-06-28 18:48:27

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

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

我的基本查询如下

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

为了与日期进行比较,我知道我必须做什么DERE> =#1/1/2016#

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

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'

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

我试过的是以下

{{1}}

这会带来结果,但不幸的是它在日期上没有正确比较。有谁知道我怎么能做到这一点?任何帮助将不胜感激!

提前谢谢

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

2 个答案:

答案 0 :(得分:1)

SQL语句永远是String,一个字符序列。它可以是VBA代码中的String变量或常量,也可以是查询对象的SQL属性。无论如何,它可以在执行之前被操纵: 在Query对象中:

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值。

答案 1 :(得分:0)

  

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

正如Brad已经评论过的,这不是Access SQL,因此永远不会起作用。

您唯一的选择是将查询更改为传递查询,该查询将发送此信息:

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

到了解语法的SQL Server。