2013-09-27 79 views
0

(我用的Oracle10g &的Java(JDBC &的Servlet))比較甲骨文

以下兩個日期是我的查詢比較ETIMESYSDATE

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

[注:在對THE_KEYETIME數據庫值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

嘗試這樣,

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九月2013)

ETIME = 19九月2013

ETIME + 7 = 26-Sep-2013

因此,你的結果是Y(由於sysdate小於ETIME + 7)

今天(27九月2013)

ETIME = 19九月2013 //相同

ETIME + 7 = 26九月2013 //相同

因此,你的結果是N(因爲你的SYSDATE比ETIME + 7以上)