不同的 Windows 时间设置是否会干扰 ACCESS 中的 WHERE SQL Date 语句?

问题描述

我知道 ACCESS 的时间格式取决于您的 Windows 时间设置。我使用 ISO-8601 格式 (YYYYMMDD),这样我就可以摆脱这样的 sql WHERE 语句:

WHERE dates > #2020/02/15#
  AND dates < #2021/01/30#

如果我在另一台计算机上运行上面的代码,例如 Windows 时间设置为 DDMMYYYY,sql 语句将不再起作用吗?我可以简单地做这样的事情来解决这个问题(会吗?):

  WHERE dates BETWEEN Format(date1,"\#YYYY\/MM\/DD\#") AND Format(date2,"#YYYY\/MM\/DD\#")

编辑:正如@Gustav 所指出的那样,时间格式已经发生了变化。问题仍然存在;第一个 WHERE 语句将不再适用于不同的 Windows 时间设置吗?第二个会解决问题吗?

解决方法

在 Access SQL 中,使用 octothorpes:

WHERE dates > #2020/02/15#
  AND dates < #2021/01/30#

WHERE dates BETWEEN Format(date1,"\#YYYY\/MM\/DD\#") AND Format(date2,"#YYYY\/MM\/DD\#")
,

不,Windows 时间设置会干扰很多事情,但不会影响排序或与日期的比较。

只要该字段被定义为日期(就像古斯塔夫所说的那样,octothorpes 就是这样),2021 年 2 月 2 日将小于 2021 年 2 月 11 日,即使如果您投射它们,情况就不会如此先到一个字符串。

过滤时总是尽量保持列的原样,所以如果日期实际上是一个日期列(而不是格式化的字符串),只需使用 WHERE dates BETWEEN #2020/02/15# AND #2021/01/30#,没有格式,没有时髦的东西。请注意,尤其是在尝试让您的应用程序在所有语言环境下都能正常工作时,避免将日期强制转换为字符串非常重要,如果将日期与格式化字符串进行比较,就会发生这种情况。