【问题标题】:comparing two dates. Equal isn't working as well比较两个日期。平等也不起作用
【发布时间】:2015-06-12 17:01:50
【问题描述】:

我在比较两个日期时遇到了麻烦: 数据库中有一个较短的日期时间字段,由 Microsoft Access 2002-2003 数据扩展名 (#yyyy/mm/dd#) 记录。当我尝试通过运算符“大于”和“小于”进行比较时,它工作正常,但是当我用运算符“等于”替换时,它给了我一个空的结果。以下是查询:

SELECT * FROM Logs WHERE (Date = #2015.06.11#) - 返回一个空结果,但是

SELECT * FROM Logs WHERE (Date > #2015.06.10#) - 没关系。 我做错了什么?

【问题讨论】:

  • 你怎么知道那个日期有记录?
  • Date> #2015/06/10# 这个查询给了我 11.06.2015 及更多时间的结果。
  • 可能存在精度问题。您可以使用 (Date>=date1 和 Date
  • 好吧,这个解决方案也不起作用。 SELECT * FROM Logs WHERE (Date > #2015/06/08#) AND (Date
  • SELECT * FROM Logs WHERE (Date >= #2015/06/11#) AND (Date

标签: sql date ms-access compare equals


【解决方案1】:

日期/时间值#2015.06.11#包含一个时间组件,即12:00 AM

如果您为该日期存储的任何值包含 12:00 AM 以外的时间部分,则它们将被您的 WHERE 子句排除。

使用修改后的WHERE 子句检索目标日期的所有行(无论一天中的什么时间),并显示您存储的日期值的时间部分:

SELECT
    l.*, 
    Format(l.Date, 'h:nn ampm') AS time_component
FROM Logs AS l
WHERE l.Date >= #2015.06.11# AND l.Date < #2015.06.12#;

请注意,对于我的系统语言环境,#2015.06.11# 由于点分隔符而无法识别为日期/时间值。但是,我认为该格式对您的语言环境有效。如果有任何疑问,请尝试使用不同的分隔符:#2015-06-11##2015/06/11#

【讨论】:

  • 我明白了! SELECT rdate FROM (SELECT l.*, cdate( Format(l.Date, 'dd/mm/yyyy') ) AS rdate FROM Logs AS l) WHERE rdate >= #2015/06/08#和rdate
【解决方案2】:

我认为你没有问题。您的表只是不包含具有该日期的条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多