在VBA中的日期间SQL查询

8
我在使用Excel和Access数据库时,在VBA中遇到了一个制作SQL查询的问题。在我的VBA代码中,我有两个数据变量,内容如下:
DateMin = 2014年7月31日22:00:00
DateMax = 2014年8月1日06:00:00
我有一个带有日期字段的Access数据库,并尝试从中提取出符合我这两个变量之间日期的数据,代码如下:
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语句不起作用。

对不起我的英语不好,我正在努力更好地解释。谢谢。

1个回答

6
您应该始终使用一个明确的日期格式。当您有一个这样的日期格式 00/00/0000时,Access必须猜测这是dd/mm/yyyy(英国)还是mm/dd/yyyy(美国)。
你的DateMin31/07/2014 22:00:00)只能被解释为dd/mm/yyyy hh:nn:ss(31不是一个有效的月份,所以它必须是一天),因此这是Access将使用的格式。
然而,您的DateMax01/08/2014 06:00:00)被解释为美国格式 - 作为2014年1月8日而不是2014年8月1日
最简单的方法是以ISO格式(yyyymmdd)提供日期或者将月份作为一个短词(dd mmm yyyy hh:mm:ss - 例如01 Aug 2014 06:00:00)。

谢谢建议,我正在尝试更改Excel和Access中的日期字段和日期变量格式,但目前还不起作用... :( - Monchou2
抱歉,我无法解决这个问题。在Access中,我已将日期字段格式更改为“dd/mmm/yyyy hh:mm:ss”,在Excel中,我使用相同格式的日期进行编码,但没有显示任何数据:( - Monchou2
2
你需要在你的查询中更改日期格式(sql = "SELECT Date FROM Table WHERE Date BETWEEN #" & DateMin & "# AND #" & DateMax & "#) - DateMin和DateMax需要格式化为dd/mmm/yyyy hh:mm:ss - Kai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接