比较oracle中的两个日期

时间:2013-09-27 05:19:48

标签: java sql oracle

(我正在使用Oracle10g和Java(JDBC和Servlets))

以下是我将 ETIME sysdate 进行比较的查询。

如果 ETIME + 7days 大于 sysdate ,那么我想选择Y,如果 ETIME + 7days 小于 sysdate 我想选择N

select USER, 
       CASE WHEN to_date(ETIME+7, 'YYYY-MON-DD HH24:MI:SS') >= to_date(sysdate, 'YYYY-MON-DD HH24:MI:SS')
            THEN 'Y' ELSE 'N' END THE_TIME
from TABLE_NAME
where THE_KEY='123456789'

[注意:ETIME的{​​{1}}的数据库值为THE_KEY]

以上查询今天返回27/09/2013。几天前它回来了N。所以我认为我正在以错误的方式比较两个日期。

任何建议都将受到赞赏。

3 个答案:

答案 0 :(得分:1)

您不必使用to_date功能。只是直接比较日期:

select USER, 
       CASE WHEN ETIME+7 >= sysdate
            THEN 'Y' ELSE 'N' END THE_TIME
from TABLE_NAME
where THE_KEY='123456789'

您可以检查原始查询出错的原因。运行以下查询,查看to_date函数如何转换日期。

select
  sysdate,
  to_date(sysdate, 'YYYY-MON-DD HH24:MI:SS')
from dual

to_date函数的第一个参数应该是'2013-SEP-27 05:29:26'之类的日期字符串,而不是日期本身。

答案 1 :(得分:1)

试试这个,

with t(user, etime, the_key) AS 
(
SELECT 1, SYSDATE - 1, '12345678' FROM dual
UNION
SELECT 2, SYSDATE - 8, '12345678' FROM dual
)
SELECT user, CASE WHEN ETIME + 7 >= sysdate
               THEN 'Y' 
             ELSE 'N' END THE_TIME
FROM t
where THE_KEY='12345678';

答案 2 :(得分:1)

除了使用to_date()之外,我没有看到任何错误。这里唯一的事情就是ETIME在一段时间内保持不变,从前几天到今天。

看一下这个例子: -

几天后(2013年9月23日)

  

ETIME = 2013年9月19日

     

ETIME + 7 = 2013年9月26日

     

因此,您的结果是Y(因为sysdate小于ETIME + 7)

今天(2013年9月27日)

  

ETIME = 2013年9月19日//相同

     

ETIME + 7 = 2013年9月26日//相同

     

因此,您的结果是N(因为您的sysdate大于ETIME + 7)