SQL查询问题

时间:2010-04-29 15:08:37

标签: sql oracle

为什么此查询会给我一个错误:ORA-01790

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'

但是当我单独运行它们时,它们会给出正确的输出。

2 个答案:

答案 0 :(得分: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' 

答案 1 :(得分: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'
)
/

或者,如果我们需要保留DATE数据类型,我们可以使用TRUNC(logical_date, 'MM')来检索该月的第一天。