0

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

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

如果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'

[注意:在数据库中ETIMEfor 的THE_KEY值为27/09/2013]

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

任何建议将不胜感激。

4

3 回答 3

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',而不是日期本身。

于 2013-09-27T05:28:08.117 回答
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';
于 2013-09-27T05:30:52.373 回答
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)

于 2013-09-27T05:31:48.617 回答