【问题标题】:Issue with comparing dates in SQL在 SQL 中比较日期的问题
【发布时间】:2013-04-18 11:30:40
【问题描述】:

我有一个包含以下列的表格

有效开始日期
有效结束日期
person_id

这是在 Oracle DB 上。
我正在编写一个查询,让我使用以下查询让我在当前 sysdate 中处于活动状态。

select startDate, endDate, sysdate
from dateTable
where sysdate between startDate and endDate;

问题是这个 where 子句似乎永远不会被应用。结果包含不满足此条件的行。关于我可能遗漏的任何建议。

【问题讨论】:

  • 什么数据库?它们是同一类型的吗?
  • 您能否给出三个字段的一些示例值
  • 所有三列都是Date 类型..?确保你有他们平等..
  • 查询是完美的,应该可以工作。请提供一些结果来显示问题
  • 是的,所有列都是日期类型。

标签: sql oracle date sysdate


【解决方案1】:

您的查询看起来不错,正如 APC 所暗示的,这是一种常见模式。这意味着您有数据问题。显示全年将显示意外记录匹配的原因,以及任何“错误”日期 - 例如使用意想不到的世纪,当使用YY 格式掩码操作日期时,这不是一个不寻常的问题:

select to_char(startDate, 'YYYY-MM-DD HH24:MI:SS') as startDate,
    to_char(endDate, 'YYYY-MM-DD HH24:MI:SS') as endDate, sysdate
from dateTable
where sysdate between startDate and endDate;

在 cmets 中,您已经注意到这显示了来自 4712 的日期,使用 YY-MON-DD 日期格式掩码显示为 12。我还没有完全看到,更常见的是看到00121912,但是4712 中带有endDate 的记录肯定在sysdate 之后结束。可能值得验证表中的所有日期,而不仅仅是那些被 where 子句标记的日期。

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2014-04-01
    相关资源
    最近更新 更多