我在使用Excel和Access数据库在VBA中进行sql查询时遇到问题。在mi VBA代码中,我有两个具有以下内容的数据变量:
DateMin = 31/07/2014 22:00:00
DateMax = 01/08/2014 06:00:00
而且我有一个访问数据库,其中包含许多带有日期字段的数据。我试图从数据库中提取两个变量之间具有日期的数据,并对此进行编码:
sql = "SELECT Date FROM Table WHERE Date BETWEEN #" & DateMin & "# AND #" & DateMax & "#
但是不起作用。结果不正确,日期不在我的两个日期之间。
但是,如果我更改句子并对此进行编码
sql = "SELECT Date FROM Table WHERE Date > #" & DateMin & "#
有用!提供具有比DateMin高的日期的数据,但是我没有DateMax来停止它。我认为问题出在我的第一个代码的第二部分,因为如果我编写代码
sql = "SELECT Date FROM Table WHERE Date < #" & DateMax & "#
我没有数据!为什么不给我提供低于DateMax的数据?因此,我认为BETWEEN语句不起作用。
对不起,我的英语,我想更好地解释我所知道的。谢谢。
您应该始终使用 明确的 日期格式。当您格式化日期时00/00/0000,Access必须猜测是dd/mm/yyyy(英国)还是mm/dd/yyyy(美国)。
00/00/0000
dd/mm/yyyy
mm/dd/yyyy
您的DateMin(31/07/2014 22:00:00)只能解释为dd/mm/yyyy hh:nn:ss,(31是无效的月份,因此必须是一天),因此这是Access将使用的格式。
DateMin
31/07/2014 22:00:00
dd/mm/yyyy hh:nn:ss
但是,您的DateMax(01/08/2014 06:00:00)被解释为 美式 格式-8th January 2014而不是1st August 2014。
DateMax
01/08/2014 06:00:00
8th January 2014
1st August 2014
解决此问题的最简单方法是以ISO格式提供日期(yyyymmdd)或以短单词形式提供月份(dd mmm yyyy hh:mm:ss-例如01 Aug 2014 06:00:00)
yyyymmdd
dd mmm yyyy hh:mm:ss
01 Aug 2014 06:00:00