2013-11-01 65 views
0

为什么结果不包括“2013年10月14日”Oracle与之间的日期?

select * 
    from table t 
where t.f_date between to_date('2013-10-20', 'yyyy-mm-dd') and 
         to_date('2013-10-14', 'yyyy-mm-dd') 
+2

他们可能会这样做。你确定你的日期'2013-10-14'没有时间分量吗?例如,如果您的日期实际上是'2013-10-14 14:15',则不会被选中。而一些Oracle客户端工具将默认不显示时间组件(例如,SQL Developer不显示时间组件“开箱即用”,尽管它[可以配置为](http://stackoverflow.com/questions/8134493/how-can-i-set-a-custom-date-time-format-in-oracle-sql-developer)。 –

回答

6

是否d.f_date包括时间分量?如果是这样,between将返回的唯一记录将是那些时间为的人,确切地说是 00:00:00。 2013-10-14所有其他人都会更大。

当比较日期时,假设没有时间部分的日期有00:00:00时间分量

+0

当我第二次尝试时,它是正确的! – xjliao

1

这可以通过在其他的答案中提到的时间成分问题引起的,但你也将需要改变你们之间的最早的日期,否则它永远不会返回任何东西。

例如

SELECT * 
FROM dual 
WHERE SYSDATE BETWEEN SYSDATE AND SYSDATE + 1; 

将返回1分的记录,但

SELECT * 
FROM dual 
WHERE SYSDATE BETWEEN SYSDATE + 1 AND SYSDATE; 

不会。