我修改过的 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')
它确实创下了艾伦·库珀的纪录。更奇怪的是,如果我们对 2011 年的视图这样做。
where election_date >= to_date(2010,'yyyy') and election_date < to_date(2011,'yyyy')
我们只得到了约翰·史密斯的唱片,没有得到艾伦·库珀的唱片,这是我们想要的,但不是我们所期望的。
然后我们将它们都更改为 statements 之间,并且它们的行为完全相同,即 2010 年至 2011 年之间获得了 John Smith 记录,2011 年至 2012 年之间什么也没有得到,而 2013 年至 2014 年之间获得了 Alan Cooper 记录。
当我写这篇文章时,我的同事设法使用这个更明确的声明来修复它。
where election_date between '01-JAN-2011' AND '01-JAN-2012'
但我还是想知道为什么上面的说法还是这么奇怪?我可能缺少使用 to_date 函数几年的东西?