You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中SELECT与UPDATE SET语句的除法运算结果差异问题

问题原因与解决方案

核心原因

你遇到的结果差异源于字段精度限制:

  • SELECT语句中,两个DECIMAL(18,2)类型的值做除法时,SQL Server会遵循decimal运算的精度规则,返回一个精度远高于两位的结果,因此能显示完整小数位。
  • UPDATE操作时,DIVISION字段被定义为DECIMAL(18,2),仅支持存储两位小数,所以计算结果会被自动截断(或四舍五入)到两位,最终只保留0.01。

解决方法

要通过UPDATE语句保留完整的除法结果,必须先调整DIVISION字段的精度,使其能容纳更多小数位:

  1. 修改字段精度(可根据实际需求调整小数位数,示例使用DECIMAL(38,16)):
ALTER TABLE #TEST ALTER COLUMN DIVISION DECIMAL(38,16) NULL;
  1. 重新执行UPDATE操作:
UPDATE #TEST 
SET DIVISION = UNIT_1 / UNIT_2;
SELECT * FROM #TEST;

执行后,DIVISION字段就能存储完整的除法结果,和SELECT语句返回的一致。

注意:你之前尝试的CAST/CONVERT无效,是因为即使把计算结果转成高精度类型,赋值给DECIMAL(18,2)字段时,仍会被强制转换回两位小数,所以修改字段精度是必要前提。

内容的提问来源于stack exchange,提问作者jwanttt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:22:45