【问题标题】:Between operator for date comparison not working properly in MS Access DB query在 MS Access DB 查询中,用于日期比较的运算符之间无法正常工作
【发布时间】:2020-02-11 18:26:26
【问题描述】:

我有简单的查询

Select *
from myTable tran

Where  tran.Party = 13  
AND  
Format(TransactionDate,'dd-mmm-yyyy') BETWEEN #07-Jan-2020# AND #11-Feb-2020# 

仅返回一条交易日期为“2020 年 1 月 7 日”的记录,而不返回介于这些日期之间的其他记录。

更新

更新 2:

如果我使用 'Greater Than' && 'Less Than' 运算符,而不是 between 运算符:

Select * from CylinderTransactions tran

Where  tran.Party = 13  AND
Format(TransactionDate,'dd-mm-yyyy') >= #07-Jan-2020# 
AND Format(TransactionDate,'dd-mm-yyyy') <= #11-Feb-2020# 

比它从 1 月 7 日获得 3 条记录,从 2 月 11 日获得 2 条记录,但仍然是 1 月 15 日的一条记录(请参阅之前的实际数据快照。

【问题讨论】:

  • 原始数据是什么样的?
  • 如果 TransactionDate 的数据类型是 Date/Time 删除函数 Format 并比较 TransactionDate。
  • @forpas 似乎这个 Format 函数搞砸了,删除该格式后,它工作正常。
  • 格式化一个日期,它不再是一个日期,它是一个字符串。 BETWEEN AND 预计日期。
  • 请注意,如果 TransactionDate 包含时间部分,则 #11-Feb-2020# 将被解释为午夜,因此它将忽略一天中的其余时间(解决方案:使用 &lt; #12-Feb-2020# 或更确切地说是 &lt; #2020-02-12#)

标签: sql ms-access


【解决方案1】:

过滤日期值本身,从不使用文字月份:

Where  
    tran.Party = 13  
    AND
    TransactionDate BETWEEN #2020/01/07# AND #2020/02/11# 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2022-01-15
    相关资源
    最近更新 更多