2016-01-26 24 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