2017-04-11 69 views
0

什麼是Oracle查詢爲CURRENT_DATE 獲取數據的列END_DATE就像下面Oracle查詢不給結果爲CURRENT_DATE

end_date 
27-10-16 03:35:00.000000000 PM 
23-11-16 11:15:00.000000000 AM 
02-11-16 03:00:00.000000000 PM 
08-11-16 09:00:00.000000000 AM 

像我運行下面的查詢

Select * from table1 
where end_date < TO_DATE('2017-04-11 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 

它正在運行成功,但是當我用當前日期替換查詢...它沒有給出結果

Select * from table1 
where end_date < TO_DATE(current_date, 'YYYY-MM-DD HH24:MI:SS') 

有人能告訴我什麼是第二個查詢沒有給結果的原因。

+1

*** *** NEVER'調用TO_DATE()'就已經是一個'date'的值。它會將'date'轉換爲'varchar',以將其轉換回到它開頭的'date'。 –

回答

0

查詢工作就像這樣去:

Select * from table1 
    where trunc(end_date) < trunc(sysdate) 

TRUNC用於將兩個日期比較,並獲取結果。

+0

'trunc'可以去除日期的時間部分。而已。 – Nitish

+0

@Nitesh sysdate是根據時間和去除時間部分給出實際結果,trunc是有幫助的。 – dhS

+0

但是用問題中給出的數據,即使你忽略了'trunc',它也可以工作。 – Nitish

2

CURRENT_DATE返回日期。沒有必要使用TO_DATE。下面的查詢應該足夠了。

Select * from table1 
    where end_date < current_date; 

如果你運行下面的查詢,你會明白你出了什麼問題。年成爲0011

SELECT TO_DATE(current_date, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; 

請注意:CURRENT_DATE返回在會話時區的當前日期。 SYSDATE返回爲數據庫所在的操作系統設置的當前日期和時間。這意味着CURRENT_DATESYSDATE可以返回不同的結果。你可以看看this

0

CURRENT_DATE已經是DATE值。如果需要,您可以使用to_char來格式化輸出。

end_date < CURRENT_DATE應該做的工作。或者您可以相應地設置nls參數以獲得更好的可讀性。

如果你只比較日期,沒有時間戳,你可以用trunc()

+0

感謝您的信息 – dhS