VBA中日期之间的SQL查询

Posted

技术标签:

【中文标题】VBA中日期之间的SQL查询【英文标题】:SQL Query between dates in VBA 【发布时间】:2014-09-23 09:22:05 【问题描述】:

我在使用 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 句子不起作用。

对不起我的英语,我试图解释得更好,我知道。谢谢。

【问题讨论】:

【参考方案1】:

您应该始终使用明确的日期格式。当您的日期格式为 00/00/0000 时,Access 必须猜测是 dd/mm/yyyy(英国)还是 mm/dd/yyyy(美国)。

您的DateMin (31/07/2014 22:00:00) 只能解释为dd/mm/yyyy hh:nn:ss,(31 是无效月份,因此必须是一天)所以这是 Access 将使用的格式。

但是,您的 DateMax (01/08/2014 06:00:00) 被解释为 American 格式 - 为 8th January 2014 而不是 1st August 2014

解决此问题的最简单方法是以 ISO 格式 (yyyymmdd) 提供您的日期或将月份提供为一个简短的单词 (dd mmm yyyy hh:mm:ss - 例如01 Aug 2014 06:00:00)

【讨论】:

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

以上是关于VBA中日期之间的SQL查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL工作日查询

SQL日期查询中的VBA变量

使用 Excel VBA 查询 MS Access,SQL BETWEEN 日期查询

VBA 代码中的 MS Access SQL 查询

使用 Access 2007 查询向导创建 SQL,仍然无法在 VBA 中运行

sql中查出两个日期之间的数据