比较SQL中的日期的问题

时间:2013-04-18 11:30:40

标签: sql oracle date sysdate

我有一个包含以下列的表

effective_start_date
effective_end_date
person_id

这是在Oracle DB上 我正在编写一个查询,使用以下查询让我成为当前sysdate的活动人员。

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

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

1 个答案:

答案 0 :(得分:0)

您的查询看起来很好,而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;

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