2014-04-17 53 views
0

我有兩列,一列是NUMBER_COLUMN(帶有數字數據類型),另一列是TIMESTAMP_COLUMN(帶有時間戳數據類型)在不同的表中。 我需要將number_column值轉換爲TIMESTAMP數據格式,以便我可以驗證它們的值。我得到了轉換的工作代碼 - 請參閱下文。預期的TIMESTAMP有NUMBER錯誤

CAST(LAST_DAY(to_timestamp(lpad(cast(NUMBER_COLUMN as varchar2(6)), 6, '0'), 'MMYYYY')) AS TIMESTAMP) 

我用上面的查詢在select語句的NUMBER_column數據值轉換爲與我timestamp_column數據格式對應的格式。 然後我有一個NOT EXISTS塊,它基本上是另一個以 結尾的select語句,其中NUMBER_COLUMN = TIMESTAMP_COLUMN。但是這最後一個條件給了我一個錯誤「TIMESTAMP GOT NUMBER」。請參閱下面的腳本。

SELECT CAST(LAST_DAY(to_timestamp(lpad(cast(NUMBER_COLUMN as varchar2(6)), 6, '0'), 'MMYYYY')) AS TIMESTAMP) AS NUMBER_COLUMN FROM TAB1 T1 
WHERE NOT EXISTS(SELECT P.TIMESTAMP_COLUMN FROM 
       (SELECT TIMESTAMP_COLUMN FROM TAB2) 
       WHERE P.TIMESTAMP=T1.NUMBER_COLUMN); 

回答

1

我認爲這個問題是您的別名和列名是相同的,所以當你指的t1.number_column是通情達理的實際數量列,而不是計算的時間戳值。另外,您不能在相關子查詢中使用列的別名。所以,這應該工作:

SELECT CAST(LAST_DAY(to_timestamp(lpad(cast(NUMBER_COLUMN as varchar2(6)), 6, '0'), 'MMYYYY')) AS TIMESTAMP) AS NUMBER_COLUMN_ALIAS FROM TAB1 T1 
WHERE NOT EXISTS(SELECT TIMESTAMP_COLUMN FROM 
       (SELECT TIMESTAMP_COLUMN FROM TAB2) 
       WHERE TIMESTAMP_COLUMN=CAST(LAST_DAY(to_timestamp(lpad(cast(NUMBER_COLUMN as varchar2(6)), 6, '0'), 'MMYYYY')) AS TIMESTAMP));