sql server中的整数除法

Phi*_*enn 41 sql-server-2005

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

SELECT cast(151/6 AS DECIMAL(9,2))
SELECT 151/6
Run Code Online (Sandbox Code Playgroud)

Mik*_* M. 45

在第一个中,您获得两个整数的结果,然后将结果转换为DECIMAL(9,2).在第二个你只是划分两个整数,这是预期的.

如果在进行除法之前将其中一个整数转换为十进制,则会得到小数结果.

SELECT 151/CAST(6 AS DECIMAL (9,2))
Run Code Online (Sandbox Code Playgroud)

  • 这件事浪费了我5个小时. (3认同)

SQL*_*ace 33

是的,这是标准行为

SELECT 151/6.0
Run Code Online (Sandbox Code Playgroud)

要么

SELECT 151/(CONVERT(DECIMAL(9,2),6))
Run Code Online (Sandbox Code Playgroud)

要么

SELECT 151/(6 * 1.0)
Run Code Online (Sandbox Code Playgroud)


Ode*_*ded 9

因为151和6是整数而你正在进行整数除法,甚至在演员之前.

您需要确保至少有一个参数是float类型:

SELECT 151.0/6
Run Code Online (Sandbox Code Playgroud)

要么

SELECT 151/6.0
Run Code Online (Sandbox Code Playgroud)


LCJ*_*LCJ 6

不是直接回答你的问题。如果你需要这个,仍然值得看看表达式中的运算符SSRS

/ 将两个数字相除并返回一个浮点结果。

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

Mod返回除法的整数余数。