如何获得确切的总数

Jet*_*ack 3 sql sql-server sql-server-2000

询问

Select 9/5 '显示输出为 1

我希望获得9/5的准确输出

预期的输出

1.8 instead of 1
Run Code Online (Sandbox Code Playgroud)

如何进行查询

Ben*_*Lee 5

问题是它正在进行整数数学运算.您可以通过添加.0以下内容将它们显式视为十进制数

SELECT 9.0 / 5.0
Run Code Online (Sandbox Code Playgroud)

您还可以使用CONVERT或CAST更加明确:

SELECT CONVERT(DECIMAL(9,4), 9) / CONVERT(DECIMAL(9,4), 5)
Run Code Online (Sandbox Code Playgroud)

注意:如果任一操作数是十进制数,结果将是十进制数,因此从技术上讲,您只需要转换其中一个.所以这些都可以工作:

SELECT 9 / 5.0
SELECT 9.0 / 5
SELECT CONVERT(DECIMAL(9,4), 9) / 5
SELECT 9 / CONVERT(DECIMAL(9,4), 5)
Run Code Online (Sandbox Code Playgroud)

之所以这样做是因为ANSI/ISO-SQL标准实际上说数学运算的结果必须与其中一个操作数的数据类型相同.因此,如果两个操作数都是整数,则根据ANSI/ISO-SQL标准的结果也必须是整数.

MySQL在这里违反了标准(可能是为了实用性),但MS SQL符合它.