2015-05-20 172 views
2

我正在尋找格式化由子查詢創建的輸出,這個子查詢產生一個計算的字段,我想格式化爲$ XX.XX。

子查詢:

(select avg(retail) from cars 
where brand = 'FORD' or brand = 'TOYOTA') as AVG_BRAND_PRICE_01 

我基本上只是想$符號和圓形輸出添加到小數點後兩位。

任何幫助或方向將不勝感激。

我使用isql加的Oracle 11g

+0

'設置numformat',你的願望。 –

回答

0

你可以試試這個:

'$' || Cast((select avg(retail) from cars 
where brand = 'FORD' or brand = 'TOYOTA') as decimal(4,2)) as AVG_BRAND_PRICE_01 

如果你想超過$ XX.XX如$ XXXXXXX.XX更多,那麼你將需要設置小數點更高例如十進制(9,2)

實例SQL小提琴:http://www.sqlfiddle.com/#!4/9f684/2/0

+0

非常感謝您的救命:) – ITworldR

+0

@ChristianBarron您只需按照自己想要的方式設置顯示。所有這些連接和CAST都是不必要的。輸出的數據類型從數字更改爲字符,這不是OP想要的。 –

+0

@ChristianBarron恐怕你採取了錯誤的方式。這是一個社區,我們討論事情。我向你和OP發表了評論。關於OP接受答案,他甚至可能不知道數據類型的變化。如果我們告訴他,你不覺得這很好嗎? –

0

我基本上只是想添加一個$符號和圓形輸出到小數點後兩位。

我使用isql加的Oracle 11g

這是一個簡單顯示設置。您需要正確設置NUMFORMAT

如果你需要的是器上SQL*Plus顯示格式,那麼最好是使用SQL*Plus命令來控制顯示格式,而不是在SQL級應用功能。

的SQL * Plus

SQL> SELECT AVG(sal) FROM emp; 

    AVG(SAL) 
---------- 
2073.21429 

SQL> set numformat $9999D99 
SQL> SELECT AVG(sal) FROM emp; 

AVG(SAL) 
--------- 
$2073.21 

SQL> 

如果您明確ROUND值保留小數點後兩位,然後用ROUND功能:

SQL> set numformat $9999D99 
SQL> SELECT ROUND(AVG(sal),2) FROM emp; 

ROUND(AVG(SAL),2) 
----------------- 
     $2073.21 

SQL> 

如果你想有一個特定的格式對於特定列,則可以使用列格式命令,該命令將覆蓋第SET NUMFORMAT個屬性在列。

例如,

SQL> set numformat $99999.99 
SQL> column comm format 99999.99 
SQL> select sal, comm from emp where rownum <=5; 

     SAL  COMM 
----------- --------- 
    $800.00 
    $1600.00 300.00 
    $1250.00 500.00 
    $2975.00 
    $1250.00 1400.00 
+1

這個解決方案的問題是,它假定select中返回的所有數值都是這種格式。 op要求以這種格式返回他的子查詢,你不知道他在選擇什麼 –

+0

@ChristianBarron當OP的子查詢返回零售的平均值時,它當然是一個數字而不是字符。由於它是一個子查詢,所以它的輸出將在外層查詢的上一層使用,而所需的數據類型將是數字而不是字符串。而且,這是一個在SQL * Plus中以所需格式顯示數字的簡單要求,它與您建議將其轉換並與字符串連接以最終將其轉換爲字符串的內容無關。 –

+0

我不是說我的是最好的答案,我只是說如果他有其他的數字被選中,他不希望這種格式,那麼你的解決方案將改變他的所有數字爲這種格式。我對嗎? –

相關問題