2010-04-29 72 views
0

爲什麼這個查詢給我一個錯誤:ORA-01790sql查詢問題

SELECT TO_CHAR(logical_date,'MM') MONTH 
     FROM logical_date WHERE logical_date_type='B'   
UNION 
SELECT 
     TO_CHAR(logical_date,'MM')+1 MONTH 
     FROM logical_date WHERE logical_date_type='B' 

但是當我分開運行,他們給正確的輸出。

+1

將「1」添加到字符串沒有任何意義。 TO_CHAR返回一個字符串,所以+1會導致隱式類型轉換爲數字。 – 2010-04-30 04:05:50

回答

4

我懷疑+1正在導致數據類型轉換。嘗試:

SELECT TO_CHAR(logical_date,'MM')+0 MONTH 
     FROM logical_date WHERE logical_date_type='B'   
UNION 
SELECT 
     TO_CHAR(logical_date,'MM')+1 MONTH 
     FROM logical_date WHERE logical_date_type='B' 
+0

+1,我在想什麼,但方式更快!那很快 – 2010-04-29 15:11:58

3

你想在這張表中加上一個明確的月份,加上他們所有的月份,對不對?

select to_char(logical_date, 'MM') MONTH 
from ( 
    SELECT logical_date 
    FROM logical_date WHERE logical_date_type='B'   
    UNION 
    SELECT ADD_MONTHS(logical_date,1) 
    FROM logical_date WHERE logical_date_type='B' 
) 
/

或者我們可以用TRUNC(logical_date, 'MM')檢索月份的第一天,我們應該需要保留DATE數據類型。