2016-03-25 20 views
0

テーブルからデータを抽出し、その列の1つが日付です。私がやりたいことは、その日に行われた計算の結果となり、結果への別の列を追加することです:問題は、私は私のネストされた選択にdateX列を渡すべきかOracle:選択したネストされたクエリ

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

ですか?私はそれが間違っている方法を知っているので、dateXはdualテーブルに存在しないので。

ありがとう

EDIT#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

DATEXは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

私は完全なクエリを使用して私の質問(参照のEDIT#1)を更新しました。 – Sherlock