2016-12-11 27 views
1

我在我的机器上使用Oracle XE。
定义的表:Oracle日期比较使用to_date不起作用

Name  Type 
ENAME  VARCHAR2(20) 
DOJ  DATE 

烧成一个简单的选择:

SELECT * FROM test1.tasty1;

ENAME    DOJ 
sat     08-DEC-16 

这样就OK了 - 我知道,DATE字段有时间成分在里面。
使用TRUNC以下查询正常工作:

SELECT * FROM test1.tasty1其中TRUNC(DOJ)= '08-DEC-16' ;

现在我想测试'to_date'函数 - 但下面的查询都不起作用 - 想知道为什么?

select * from test1.tasty1 where DOJ = to_date('08 -12-2016','DD-MM-YYYY');
select * from test1.tasty1 where DOJ = to_date('08 -DEC-2016','DD-MON-YYYY');
select * from test1.tasty1 where DOJ = to_date('08 -DEC-16','DD-MON-YY');
select * from test1.tasty1 where DOJ = to_date('08 -DEC-16','dd-mon-RR');

已采取了发生在SO以下几点:
Oracle TO_DATE not working

所以不知道这里有什么问题?

+0

请尝试以下查询:'SELECT * FROM test1.tasty1 WHERE DOJ ='2016-08-12'' ...这是否会返回任何内容? AFAIK您尝试的4个查询中的一些应该返回该记录。 –

+0

如果我尝试'select * from test1.tasty1 where DOJ = '08 -DEC-16';'',则'上面的'文字与格式字符串不匹配'失败'没有给出结果 –

+0

这不是我要求你运行的。我让你运行'WHERE DOJ ='2016-08-12'' –

回答

0

从您的问题和意见,看来,这是发生的事件的顺序。

你做了以下INSERT到表:

INSERT INTO test1.tasty1 VALUES ('sat', SYSDATE) 

请记住,在甲骨文日期既有日期时间分量。所以,即使你插入了日期'2016-12-08'插入了一个时间组件。其结果是,下面的查询没有返回任何记录:

SELECT * FROM test1.tasty1 WHERE DOJ = '2016-08-12' 

这可能是因为你从来没有指定的时间成分,因此,您之前插入的记录不匹配。如果你想比较只有日期部分,你可以使用TRUNC如下:

SELECT * FROM test1.tasty1 WHERE TRUNC(DOJ) = '2016-08-12' 

你的问题的解决向前迈进将是插入过程中与TRUNC包裹SYSDATE,如果你真的只想处理日期组件。

顺便说一句,用作文字的格式'08-DEC-16'不会被Oracle认定为有效日期。相反,使用'2016-12-08'

+0

蒂姆 - 谢谢 - 我得到了时间和需要使用TRUNC。这是可以理解的。我不理解的是 - 这是否意味着TO_DATE在涉及时间组件时不起作用(它在我的例子中)? –

+0

@satishmarathe在你的情况下,你做比较的列_does_有一个时间组件,所以如果你不匹配的话,那么是的比较不会工作AFAIK。但是,如果您将截断的日期与没有时间组件的'to_date'进行比较,并且该时间组件是在没有时间组件的情况下创建的,那么我会希望比较起作用。 –

+0

好了,所以现在它是有道理的 - to_date也会考虑'时间'方面,因为我们正在做一个比较(不大于或小于) - 它试图做一个完全匹配 - 这引发了另一个问题 - 如果我只是简单地想要使用日期字段,并且对时间不感兴趣 - 我应该使用哪种数据类型 - 将会读取并根据需要 - 发布单独的问题 - 感谢您的输入 –

0

你有没有尝试过这样的日期与时间的比较是正确的:

select * from test1.tasty1 where to_date(DOJ,'DD-MM-YYYY') = to_date('08-12-2016','DD-MM-YYYY'); 

比较苹果与苹果,而不是与芒果。

+0

Oracle建议不要将Date对象传递给to_date你推荐的LHS和FYI - 你建议的SQL也没有结果 - 苹果比较返回橙子! :)。根据@TimBiegeleisen的说法,这是有意义的 - 这里涉及时间组件 –