2011-05-31 198 views
2

说我有下面的代码Oracle日期比较

一些SQL查询......之后是此条件

AND EndDate < TO_DATE('02/14/2011','MM/DD/YY')+1 

难道同

AND EndDate <= TO_DATE('02/14/2011','MM/DD/YY') 

回答

6

注意:我假设根据您的to_date格式,EndDate是日期字段而不是日期/时间数据类型。

这两个查询都应返回相同的结果集。考虑以下内容:

--Substitue "EndDate" for SYSDATE for this exercise 

-- Does "EndDate" occur before June 01, 2011? (Yes) 
SELECT 'TRUE' 
FROM DUAL 
WHERE TRUNC(SYSDATE) < TO_DATE('05/31/2011','MM/DD/YY')+1 

-- Does "EndDate" occur on or before May 31, 2011? (Yes) 
SELECT 'TRUE' 
FROM DUAL 
WHERE TRUNC(SYSDATE) <= TO_DATE('05/31/2011','MM/DD/YY') 

这两个结果都会产生“TRUE”。你有什么疑问?

+0

当我尝试第一个时,我得到2766行或什么东西,当我尝试第二个时,我得到2300行或东西。如果它等于相同的条件,那么它不应该返回给我一组相同的行。 – kalls 2011-05-31 16:30:01

+0

你是否有资格参加其他活动?当您在查询中围绕endDate包装TRUNC()时会发生什么?返回多少行? – 2011-05-31 16:48:51

+1

CJ - 当我使用Trunc时,它返回相同数量的行。所以现在我明白这两个都是真的。 – kalls 2011-05-31 17:04:56

2

取决于是否结束日期为一个DateTime或只是一个日期。如果EndDate = 2/14/2011 3:00:00,第二个将是错误的,但第一个是真的。

+0

如果该字段只是一个日期,您提供的代码将工作得很好。 – mrK 2011-05-31 16:31:09