sql - 如何得到准确的总数

标签 sql sql-server sql-server-2000

查询

选择 9/5 '显示输出为 1

我想获得 9/5 的准确输出

预期输出

1.8 instead of 1

如何查询

最佳答案

问题是它在做整数运算。您可以通过添加 .0 将它们显式地视为十进制数:

SELECT 9.0 / 5.0

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

SELECT CONVERT(DECIMAL(9,4), 9) / CONVERT(DECIMAL(9,4), 5)

注意:如果其中一个操作数是十进制数,则结果将是十进制数,因此从技术上讲,您只需转换其中一个。所以这些中的任何一个也将起作用:

SELECT 9 / 5.0
SELECT 9.0 / 5
SELECT CONVERT(DECIMAL(9,4), 9) / 5
SELECT 9 / CONVERT(DECIMAL(9,4), 5)

它起作用的原因是因为 ANSI/ISO-SQL 标准实际上规定数学运算的结果必须与其中一个操作数的数据类型相同。因此,如果两个操作数都是整数,则根据 ANSI/ISO-SQL 标准,结果也必须是整数。

MySQL 在这里违反了标准(大概是出于实用性的考虑),但 MS SQL 符合标准。

关于sql - 如何得到准确的总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9442879/

相关文章:

mysql - 如何连接三个 SQL 表以便我们可以从第三个表获取信息?

mysql - 获取两个表的唯一行

Java JFrame不会显示

sql - 为什么这两个查询的时间相似(超过 200 万行大约需要 52 秒)

sql - T-SQL 参数

c# - 请帮助我将 SQL 转换为 LINQ

sql - 执行表更改脚本删除 Azure SQL 表

SQL-Server:错误 - 逻辑文件不是数据库的一部分。使用 RESTORE FILELISTONLY 列出逻辑文件名

php - 这些 NULL 是什么意思?

sql-server-2000 - SQL 2000 使用 GROUP BY 进行行编号