轉自:http://blog.sina.com.cn/s/blog_8020e41101019k7t.html
SELECT field1/field2 FROM TB;
當 field1的數值 > field2的數值時,除法得出的結果是<1的,即0.xxxxxx
這個時候在DB2的環境下SELECT出來的值是0
解決方法:
先把field1轉換成DOUBLE類型的,這樣計算出來的就會得出小數點了,會顯示出0.xxxx
SELECT CAST(field1 AS FLOAT)/field2 FROM TB;
ps.網上搜的資料,寫的是double,但在SQL Server2008中一直報錯,改成FLOAT就沒問題了。
小數點後顯示4位小數。
可以進一步四舍五入,保留兩位小數點
SELECT ROUND(CAST(field1 AS DOUBLE)/field2, 2) FROM TB;
不過因為我要用到百分比,就改成了
SELECT CAST(field1 AS FLOAT)/field2 * 100 FROM TB;
然後再頁面顯示時再加上“%”
如果數據列的值為NULL,將其設置為0,那么sql就要這么寫
SELECT ROUND(COALESCE(CAST(field1 AS DOUBLE), 0)/field2, 2) FROM TB;
COALESCE這個函數系統的用法如下:
a. 輸入參數為字符類型,且允許為空的,可以使用COALESCE(inputParameter,”)把NULL轉換成”;
b. 輸入類型為整型,且允許為空的,可以使用COALESCE(inputParameter,0),把空轉換成0;
c. 輸入參數為字符類型,且是非空非空格的,可以使用COALESCE(inputParameter,”)把NULL轉換成”,然后判斷函數返回值是否為”;
d. 輸入類型為整型,且是非空的,不需要使用COALESCE函數,直接使用IS NULL進行非空判斷。
----------------------------------------------------------------
CONVERT( VARCHAR(6), ROUND( COALESCE(CAST(((AllCount - CompleteCount) * 100) AS DOUBLE PRECISION), 0) / AllCount, 2 ) ) + '%'
備注:
CAST函數用來類型轉換
ROUND函數用來控制小數位數