我知道这个问题已被问过几次,但我认为这有点独特。 我有一个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。
答案 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。