整数在SQL Server中的分工

在Microsoft SQL Server 2005中,为什么以下命令会产生整数结果?

SELECT cast(151/6 AS DECIMAL(9,2)) SELECT 151/6 

首先你得到两个整数的结果,然后把结果作为DECIMAL(9,2)。 在第二个,你只是分两个整数,这是预期的。

如果您在进行除法之前将其中一个整数作为小数点,您将得到一个十进制结果。

 SELECT 151/CAST(6 AS DECIMAL (9,2)) 

是的,这是标准的行为

 SELECT 151/6.0 

要么

 SELECT 151/(CONVERT(DECIMAL(9,2),6)) 

要么

 SELECT 151/(6 * 1.0) 

因为151和6是整数,你正在做整数除法,甚至在演员之前。

您需要确保至less有一个参数是浮点types:

 SELECT 151.0/6 

要么

 SELECT 151/6.0 

不是你的问题的直接答案。 如果你在SSRS需要这个,还是值得看看expression式中的运算符

/划分两个数字并返回一个浮点结果。

\将两个数字相除并返回一个整数结果。

Mod返回除法的整数余数。

您还需要为小数位提供一个占位符

 SELECT 151.000000/6 OR SELECT 151/6.000000 

两者都会产生

25.16666666

出于同样的原因,他们将在C#,Java和其他主stream语言。

整数'算术,CAST是在math之后…

尝试这个:

 SELECT 1.0*cast(151/6 AS DECIMAL(9,2)) SELECT 1.0*151/6