我修改的 Oracle 视图遇到了一个特殊问题。我的想法是我有一个存储所有选举候选人的基表,还有一个选举日期列,告诉我们这个候选人参加了什么选举,就像这样。
NAME | ELECTION_DATE
---------------------------
John Smith | 01-APR-2011
Alan Cooper| 02-MAY-2013
ELECTION_DATE 列存储为日期。我们使用以下 2011 年的陈述为 2011 年和 2013 年构建了 2 个视图。
where election_date >= to_date(2011,'yyyy') and election_date < to_date(2012,'yyyy')
我们认为它只会拾取上面的 John Smith 记录,但事实并非如此。奇怪的是,当我们为 2013 年视图执行此操作时。
where election_date >= to_date(2013,'YYYY') and election_date < to_date(2014,'YYYY')
它确实获得了 Alan Cooper 的记录。更奇怪的是,如果我们为 2011 年的视图这样做。
where election_date >= to_date(2010,'yyyy') and election_date < to_date(2011,'yyyy')
我们只得到了 John Smith 的记录,而不是 Alan Cooper 的记录,这是我们想要的,但不是我们所期望的。
然后我们将它们都更改为在语句之间,它们的行为完全相同,即在 2010 年和 2011 年之间获得了 John Smith 记录,在 2011 年和 2012 年之间获得了任何结果,而在 2013 年和 2014 年之间获得了 Alan Cooper 记录。
在我写这篇文章时,我的同事设法通过使用这个更明确的声明来修复它。
where election_date between '01-JAN-2011' AND '01-JAN-2012'
但我仍然想知道为什么上面的语句仍然如此奇怪?我可能在几年内使用 to_date 函数时遗漏了什么?