sql - 错误:将数字转换为数字数据类型的算术溢出错误
问题描述
我收到错误:
在下面的代码中将数字转换为数据类型数字的算术溢出错误。
declare @A as nvarchar(100) --will be Nvarchar only
declare @T as nvarchar(100) --will be Nvarchar only
declare @Act as nvarchar(100) --will be Nvarchar only
set @A ='750000'
set @T ='552000'
SELECT @Act = cast(cast(cast(@A AS decimal(10, 4)) -cast( @T AS decimal(10, 4))
/cast(@T AS decimal(10, 4)) AS decimal(10, 4)) * 100 AS numeric(10, 4))
如何解决这个错误?
解决方案
首先,为什么您使用错误的数据类型并让事情变得困难,您应该始终使用正确的数据类型。
因此,而不是VARCHAR
为什么不使用DECIMAL
,仍然是查询,因为您的问题是如何解决这个错误
declare @A as nvarchar(100) --will be Nvarchar only
declare @T as nvarchar(100) --will be Nvarchar only
declare @Act as nvarchar(100) --will be Nvarchar only
set @A ='750000'
set @T ='552000'
SELECT @Act = CAST(
(
CAST(@A AS DECIMAL(10,4))-
CAST(@T AS DECIMAL(10,4))
) /
(CAST(@T AS DECIMAL(10,4)) * 100)
AS VARCHAR);
SELECT @Act
无需转换AS numeric(10, 4)
,您需要转换为,VARCHAR
因为您将值分配给 varchar 变量,而不是数字变量。
如果您更改数据类型,您的查询将很容易,例如:
DECLARE @A DECIMAL(10,4) = 750000,
@T DECIMAL(10,4) = 552000,
@Act VARCHAR(100);
SELECT @Act = CAST((@A - @T) / (@T * 100) AS VARCHAR(100))
SELECT @Act
或者,如果您想将结果转换为numeric(10, 4)
DECLARE @A DECIMAL(10,4) = 750000,
@T DECIMAL(10,4) = 552000,
@Act VARCHAR(100);
SELECT @Act = CAST(CAST((@A - @T) / (@T * 100) AS numeric(10, 4)) AS VARCHAR(100))
SELECT @Act
推荐阅读
- neo4j - Neo4j - 添加 id 作为每个节点的属性
- javascript - 在 JavaScript 中的数组数组内计数
- ios - 如何在滑动手势识别器函数中找到 UIButton 元素的父元素以构造对象?
- sql - 用于获取一些产品信息的 SQL 查询
- twitter-bootstrap - 无法在 Bootstrap 4 中更改导航栏链接的颜色
- javascript - 使用 Chosen 插件的条件语句
- java - Java:找不到符号(数组类)
- c# - 没有项目的智能感知
- mysql - 如何替换MySQL中包含特殊字符的长字符串
- sql - 如何为必须为每个子组选择顶行的大表构建有效索引?