2016-01-25 19 views
0

我想在表示列標題的SQL結果中打印一行。列標題只有VARCHAR值。現在我有這個問題,一個收到以下錯誤信息:「ORA-01790:表達式必須具有相同的數據類型對應的表情」:如何在SQL Union中組合字符和非字符值(Oracle)

SELECT * 
FROM 
(
    SELECT 'MyFirstString', 
      'MySecondString', 
      'MyThirdString' 
    FROM DUAL 
          ) 

UNION 

(
    SELECT firstCol, // contains number 
      secondCol, // contains DATE 
      thirdCol // contains VARCHAR2 
               )  

我怎樣才能解決這個問題。額外的列標題是必要的,因爲我必須導出我的數據在另一個文件中(如CSV,PDF ...)

+3

CAST非字符數據,字符類型。 – jarlh

+0

你也應該使用'union all'而不是'union'來避免去除重複項的開銷 –

回答

2

使用TO_CHAR投

SELECT * 
FROM 
(
    SELECT 'MyFirstString', 
      'MySecondString', 
      'MyThirdString' 
    FROM DUAL 
          ) 

UNION 

(
    SELECT to_char(firstCol), // contains number 
      to_char(secondCol), // contains DATE 
      thirdCol // contains VARCHAR2(no need cast here since its already string) 
              ) 

您稍後可能需要將它轉換回它是什麼取決於你想用它做什麼。

對於日期,你可以使用TO_DATE,數to_decimal \ TO_NUMBER和等。

0

您可以試試這個,並導出帶有標題的表。

SELECT firstCol as 'MyFirstString', // contains number 
     secondCol as 'MySecondString', // contains DATE 
     thirdCol as 'MyThirdString' // contains VARCHAR2 
+0

不,我需要分隔列中的列標題! – Marwief

+0

@Marwief注意到「導出帶有標題的表」,應該向CSV結果添加另一行。 – Aaron

+1

'as'MyFirstString''無效的SQL。單引號用於字符串常量,而不用於標識符。 –

相關問題