(我正在使用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
。所以我认为我正在以错误的方式比较两个日期。
任何建议都将受到赞赏。
答案 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)