分享SQL中的數字格式化執行個體

來源:互聯網
上載者:User
用sql語句來格式化double型的資料,比如,只取出小數點後面的兩位
一。主要方法

--取小數位前數字,不考慮四捨五入
select left('30000.72234', charindex('.', '30000.72234')-1)
其中:charindex('.', '30000.72234')獲得小數點的位置;-1則表示在小數點前面的全部,如果想擷取小數點後面的n為,寫成+n就可以了。還挺好用的。

--每三位用逗號相隔,留2位小數,不考慮四捨五入
select convert(varchar, cast(round(30000.72234,0) as money), 1)

--每三位用逗號相隔,不留小數位,考慮四捨五入
select left(convert(varchar, cast(round(30000.72234,0) as money), 1) , charindex('.', convert(varchar, cast(round(30000.72234,0) as money), 1))-1)


二。CAST和 ROUND的比較
1.
SELECT CAST('123.456' as decimal) 將會得到 123(小數點後面的將會被省略掉)。
如果希望得到小數點後面的兩位。
則需要把上面的改為
SELECT CAST('123.456' as decimal(38, 2))

===>123.46
自動四捨五入了!

2.
SELECT ROUND(123.75633, 2, 1),
ROUND(123.75633, 2)
上面的SQL得到的2個值是不一樣的,前一個是:123.75000,後一個是:123.76000。
因為前者在進行四捨五入之前,小數點後已經被截取,保留了2位。
而後者則沒有被截取,四捨五入時自然就會得到123.76000


問題:需要對在Oracle資料庫中查詢出來的數值進行比率的計算。類似於如下的SQL:
Select Round((discount/Amount),2) from dual;

這樣算出來的數字可以滿足絕大部分的需求。但是對於不到1的數字,問題出來了……顯示的類似於 .45樣子的資料。0.45前面的0不見了。

以下總結了兩種方法來解決缺0的問題。

第一種解決方案:
SELECT DECODE (TRUNC (1/100),0, REPLACE (1/100, '.', '0.'),TO_CHAR (1/100))
FROM DUAL;

大家只要在1/100的地方替換成自己需要的百分數就可以了。

第二種解決方案:
SELECT RTrim(To_Char(1/100,'FM99999999990.9999'),'.') FROM dual;

替換方式和上面相同。

兩種方式的詳細比較:

第一種公式比較複雜,但可以處理通用的數值。

第二種看起來簡單,不過格式化的值的位元一定要大於計算的位元才行。比如 SELECT RTrim(To_Char(200,'FM90.9999') ,'.') FROM dual; 顯示的就是########,因為已經超過了格式化的範圍。

--------------------

我在表tb中查出欄位a的值為0.4286,怎樣可以轉為百分數42.9%(小數點後保留一位小數)
例如
select a from tb
0.4286
我想得到的結果為
42.9%

SQL code

select cast(cast(a*100 as decimal(18,1)) as varchar) + '%' from tb

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.