2016-01-26 41 views
0
create table test_int 
    (
    num bigint 
    ) 

insert into test_int (num) 
values (4096); 

我的任務是計算4096/1024/1024並獲得小數的答案。好吧,INT不存儲值點之後,所以:MS SQL數字數據類型和轉換與刪除零

select CAST (num as decimal)/1024/1024 AS decimal, ROUND ((CAST (num as decimal)/1024/1024),4,1) AS numeric from test_int 

第一個是純resault,第二個是四捨五入後:

decimal   numeric 
0.00390625000 0.00390000000 

的任務是消除空零值之後。

select convert(decimal(25,5), 4096/1024/1024 ,0) 

返回0.00000。

那麼我怎樣才能得到0.0039而不是0.00390000000? 在此先感謝您提供任何幫助。

+0

由於結果的數據類型,「零」存在。 a)通常可以忽略它們,b)通常可以通過在表示層應用適當的格式來處理它們,以及c)沒有系統的方式在SQL級別處理它們而不知道結果的價值。 –

+0

我明白了,但是,在我看來,應該有像檢查數字之後是否有零的方式,比減少零和右邊部分。 – Cove

回答

1

將結果轉換爲FLOAT

查詢

SELECT 
CAST 
(
    CAST(num as decimal)/1024/1024 
    AS FLOAT 
) AS decimal, 
CAST 
(
    ROUND((CAST (num as decimal)/1024/1024),4,1) 
    AS FLOAT 
) AS numeric 
from test_int; 

結果

+---------------+---------------+ 
| decimal  | numeric  | 
+---------------+---------------+ 
| 0.00390625 | 0.0039  | 
+---------------+---------------+ 

SQL Fiddle

+0

非常感謝,您的答案將在2分鐘內被接受。 – Cove

1

這人會工作,但如果我沒有記錯,這將只對2008年版的工作,以上。

SELECT CONVERT(DOUBLE PRECISION, 0.00390000000) 

result: 0.0039 
+1

無論如何非常感謝 - 我在2008年在其他項目。 – Cove

+1

它在2005年的作品也很棒! – Cove

+0

@歡迎您的光臨:),哦,我明白了..我還沒有嘗試過它在更低版本..因爲我知道它只會在2008年以上工作..但我很高興它的工作:) – Japongskie