在 SQL 語法中,當我們要將 51 除以 100 會寫成 51 / 100,得到的結果應該是 0.51 嗎?

那我用 ROUND(51 / 100 , 0),應該會進位後得到 1 吧?

結果居然是 0。

 

範例碼(一):

SELECT
	51 / 100  ,
	ROUND(51 / 100 , 0) 

執行結果:

2017-06-14_213258  

 

這是跟資料類型優先順序有關係!

 


 

 利用資料類型優先順序,把除法運算子左右兩旁的整數,其中一個轉換為浮點數,這時因為運算子結合了整數浮點數

隱含的轉換會將整數轉換為浮點數,為什會轉換成浮點數呢?因浮點數優先順序高整數,最後結果就是浮點數,當然左

右整數都先強制轉換浮點數最好。

 

範例碼(二):

SELECT
 1.0 * 51 / 100 , 

 51 / (1.0 * 100) ,

 --將整數 51 轉浮點數(FLOAT)
 CAST(51 AS FLOAT) / 100 ,

 --將整數 51 轉浮點數(FLOAT)
 CAST(51 AS FLOAT) / CAST(100 AS FLOAT)

執行結果:

2017-06-14_214427  

 

範例碼(三):

 SELECT
        --將整數 21 轉浮點數(FLOAT)
	ROUND(CAST(21 AS FLOAT) * 228 / 60 , 2)

執行結果:

2017-06-14_214732  

 

 

Reference:http://adalf0722.blogspot.tw/2010/08/blog-post.html

Reference:https://dotblogs.com.tw/yangxinde/2011/03/24/22062

arrow
arrow
    全站熱搜

    mitblog 發表在 痞客邦 留言(0) 人氣()