当前位置: 首页 > 面试题库 >

VBA中日期之间的SQL查询

顾宸
2023-03-14
问题内容

我在使用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(美国)。

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

但是,您的DateMax01/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



 类似资料:
  • 问题内容: 我有一个和。我想获取这两个日期之间的日期列表。谁能帮助我指出查询中的错误。 这是一个变量。 问题答案: 您应该将这两个日期放在单引号之间,例如。 或可以使用 请记住,第一个日期是包含日期,但第二个日期是排除日期,因为它实际上是“ 2011/02/27 00:00:00”

  • 问题内容: 我需要有关SQL查询的帮助。 我正在尝试从表中选择所有记录,这些记录将不能在两个日期“ 2009-12-15”和“ 2010-01-02”之间容纳。 这是我的表结构: 我的查询: 知道为什么我的查询选择错误的记录吗?我应该将查询中的值顺序更改为类似以下内容: 非常感谢您的帮助 问题答案: 如何尝试: 它将返回所有与您的日期范围完全不重叠的日期范围。

  • 问题内容: 我正在管理事件数据库。每个事件都有开始和结束时间戳记()。 目前,我可以通过一个SQL查询执行以下操作: 建立日历,并记下发生事件的日期 列出给定日期(YYYY / MM / DD,YYYY / MM)中发生的事件 问题是当一个事件跨越几天时,我无法在它的开始和结束时间戳之间的日期列出它。 例如: 活动开始于2011/05/25和结束于2011/05/27,但我无法在页面2011/05

  • 问题内容: 我想选择两个日期之间的记录- startDate和endDate(它们是sql中的日期/时间格式)。我有以下sql查询,但它不起作用,有人可以告诉我我在做什么错吗? 问题答案: 我建议将日期转换为日期时间并进行比较,并使日期保持标准和一致。就像是: 注意:我假设您的startDate和endDate与您提供的字符串具有相同的格式。

  • 问题内容: 首先,感谢任何帮助我解决此问题的人。我正在使用SQL 2005,但如果05中没有可用的解决方案,则可以使用2008。 我有一排数据看起来像这样: 因此,我要做的是每天计算每个区域的总请求量。结果应为: 我该怎么做呢?我很沮丧,没有任何谷歌搜索帮助。 问题答案: 您将需要一个Calendar表,或者可以使用CTE生成一个。一旦有了这些,其余的查询就应该变得无关紧要了。由于递归问题并且不允

  • 问题内容: 我有一列的数据像 我需要编写一个SQL查询/过程,这将有助于我获取日期之间差异的平均值。对于上面的示例,它将是 (19 + 8 + 10)/3=12.33。 请提供帮助。 在此先感谢Geetha 问题答案: 我不知道您的RDBMS,但这是来自SQL Server。另外,您的计算之一是错误的-02/09/2011-13/08/2011是20,而不是19。 产生的结果是12.667:(20