我有一个包含以下列的表
effective_start_date
effective_end_date
person_id
这是在Oracle DB上 我正在编写一个查询,使用以下查询让我成为当前sysdate的活动人员。
select startDate, endDate, sysdate
from dateTable
where sysdate between startDate and endDate;
问题是这个where子句似乎永远不会被应用。结果包含不满足此条件的行。关于我可能遗失的任何建议。
答案 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
。我没有看到这一点,更常见的是0012
或1912
,但endDate
中4712
的记录肯定会在sysdate
之后结束。可能值得验证表中的所有日期,而不仅仅是那些被where
子句标记的日期。