访问VBA& SQL日期格式

时间:2016-03-10 13:02:02

标签: sql vba ms-access access-vba

我在SQL语句中遇到日期格式问题

CurrentTime = Format(CurrentTime, "dd/mm/yyyy hh:mm")
SQL = "SELECT Count([ID]) AS Booked FROM [Appointment Slots] WHERE [Appointment Slots].Time=#" & CurrentTime & "#"

这里奇怪的是,有时当我运行代码时,这是有效的。其他时候,并且没有更改代码,它没有,但是当我将日期格式更改为mm / dd / yyyy hh:mm然后它工作一段时间然后停止工作直到我将其更改回dd / mm / yyyy hh:mm

显然,区域日期设置以及它如何存储日期会出现问题,但我无法确定解决方案。是否无法比较Access SQL中与格式无关的日期?

3 个答案:

答案 0 :(得分:4)

你应该习惯使用 ISO序列 nn 几分钟。

还要转义“/”和“:”以获得正斜杠和冒号,否则它们将被替换为本地化的日期和时间分隔符:

CurrentTime = Format(CurrentTime, "yyyy\/mm\/dd hh\:nn")

这也适用于 ADO FindFirst ,“反向”US格式(mm / dd / yyyy)不适用。

答案 1 :(得分:1)

查询中使用的日期格式#....#仅适用于美国日期格式mm / dd / yyyy

使用日期的最佳方法是将它们作为参数传递给查询。在这种情况下使用内部格式,它不依赖于区域设置。

答案 2 :(得分:1)

  

是否无法比较Access SQL中独立于的日期   格式?

考虑在WHERE子句中使用参数的查询,类似于此...

WHERE [Appointment Slots].Time=[Enter Appointment Time]

您还可以在SQL语句的开头添加PARAMETERS子句,但这不是绝对必需的......

PARAMETERS [Enter Appointment Time] DateTime;

因此,当查询需要Date / Time参数时,您只需为其指定日期/时间值。

参数查询可以避免日期格式问题,并且还可以避免在SQL语句中使用#日期分隔符。