2013-09-27 3 views
0

(я использую oracle10g & Java (JDBC & Servlets))сравнить две даты в оракула

Ниже мой запрос для сравнения ETIME с SYSDATE.

Если ETIME + 7дней больше SYSDATE, то я хочу, чтобы выбрать Y и если ETIME + 7дней меньше 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 для THE_KEY является 27/09/2013]

Выше запроса возвращает N сегодня. Несколько дней назад возвращался Y. Поэтому я думаю, что я неправильно сравниваю две даты.

Любое предложение будет оценено по достоинству.

ответ

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', не сама дата.

+0

благодарит за ответ. Работает. – Bhushan

1

Try, как это,

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'; 
1

Я не вижу ничего плохого в частности, кроме использования to_date(). Единственное, что может случиться, это то, что ETIME оставалась постоянной в течение определенного периода времени, с нескольких дней до сегодняшнего дня.

Посмотрите на этот пример: -

Несколько дней назад (на 23-Sep-2013)

ETIME = 19-Sep-2013

ETIME + 7 = 26-Sep-2013

Таким образом, ваш результат был Y (Так как SYSDATE было меньше, чем ETIME + 7)

Сегодня (27-Sep-2013)

ETIME = 19-Sep-2013 // же

ETIME + 7 = 26-Sep-2013 // же

Таким образом, ваш результат был N (Так как ваш системный запас больше, чем ETIME + 7)

Смежные вопросы