sql - 正确的顺序是什么?应该是圆形 -> 类型转换还是类型转换 -> 圆形

标签 sql sql-server

当我尝试舍入时,正确的顺序应该是什么?

   ,CAST(ROUND(COUNT(FIRE_SAFETY.DATE_COMPLETED) * 100.0 / COUNT(FIRE_SAFETY.EESS_ID),2) as  decimal(16,2)) AS Percentage
   ,ROUND(CAST(COUNT(FIRE_SAFETY.DATE_COMPLETED) * 100.0 / COUNT(FIRE_SAFETY.EESS_ID) as decimal(16,2)),2) AS Percentage

最佳答案

如果您需要答案到小数点后两位,您应该只使用强制转换为小数(n,2)。

COUNT() 函数返回整数。当运算符组合两个不同数据类型的表达式时,数据类型优先级规则指定优先级较低的数据类型转换为优先级较高的数据类型。

因此,任何 100.0 的运算都会导致隐式十进制转换为 100.0 类型,即带小数位置。

所以下面的语句应该足够了

 ,CAST(COUNT(FIRE_SAFETY.DATE_COMPLETED) * 100.0 / COUNT(FIRE_SAFETY.EESS_ID) as decimal(16,2)) AS Percentage

参见this MSDN link 关于 SQL Server 中的精度和小数位数如何根据表达式中的组合类型受到影响。

还有 another mSDN link 关于优先规则。

关于sql - 正确的顺序是什么?应该是圆形 -> 类型转换还是类型转换 -> 圆形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50834555/

相关文章:

sql - (1,1)在SQL中是什么意思?

java - 无法将 java.sql.Date 插入数据库中的 "Date"字段

mysql - 需要更新包含数百万行的 MySQL 表

sql-server - 如何在 SQL Server Management Studio 中自动换行

sql-server - 有没有办法使用实际的数据库名称作为 SQL Server 数据库项目的引用数据库中的数据库变量名称?

sql - 日期列作为主键一部分的优缺点

sql-server - 使用触发器来强制数据完整性 - 多余吗?

sql - SQL select语句显示不存在的列?

sql-server - 从存储过程返回错误消息

MySQL 插入...选择 #1054 错误