2016-03-25 43 views
0

我從表中提取一些數據,其中一列是日期。我想要做的是另一列添加到結果,這將是該日的計算結果:Oracle:select中的嵌套查詢(比較日期)

select dateX, (select dateX - CURRENT_DATE from dual) 
from TableX 

的問題是我應該如何通過dateX列到我的嵌套選擇?我知道我說的方式是錯誤的,因爲dateX不存在於dual表中。

謝謝

編輯#1

其實,這是我的查詢:

SELECT DISTINCT 
     id,site,TO_CHAR(dateX,'RRRR-MM-DD') startDate, (  
with test(d) as (select TO_DATE(dateX, 'RRRR-MM-DD') from dual) 
select case 
     when trunc(d) = trunc(sysdate) then 'PRESENT' 
     when trunc(d) > trunc(sysdate) then 'FUTURE' 
     when trunc(d) < trunc(sysdate) then 'PAST' 
     end 
from test 
) startdateCompare 
FROM 
     TableX 
WHERE 
     id = 6502 

startdateCompare應該包含根據日期dateX的值。

當我執行它時,我得到:dateX : invalid identifier

回答

1

假設德恩爲DATE類型的,你不應該需要調用TO_DATE就可以了(在你的內心查詢)。你甚至可能得到錯誤的答案。 TO_DATE需要一個字符變量。你給它dateX,所以Oracle會使用你的NLS設置將它轉換爲字符,這可能不是'RRRR-MM-DD' - 如果不是,你可能會在TO_DATE試圖將它轉換回日期爲'RRRR-MM-DD'格式。

您的查詢不需要子查詢。它應該是:

SELECT DISTINCT 
    id, site, TO_CHAR(dateX, 'RRRR-MM-DD') startDate, 
     case when trunc(dateX) = trunc(sysdate) then 'PRESENT' 
      when trunc(dateX) > trunc(sysdate) then 'FUTURE' 
      when trunc(dateX) < trunc(sysdate) then 'PAST' 
     end startdateCompare 
FROM (etc.) 

最佳,mathguy

+0

絕對數學!謝謝 – Sherlock

0

你的代碼實際上工作。 dateX的值將來自外部查詢。

把它寫的簡單的方法是:

select dateX, (dateX - CURRENT_DATE) as newcol 
from TableX; 
+0

我已經更新了我的問題(參見編輯#1)完整的查詢。 – Sherlock