如何在sql server中将浮点字段转换为十进制?
我想将浮点字段转换为十进制字段;我希望我的decimal字段的精度为11,2,但当我试图更改字段的类型示例:Amount时,我遇到一个错误:算术溢出错误将float转换为数据类型numeric。 声明已终止。我的字段是表中的小数11,2,我的最大值和最小值是:1603837393.70<->-1688000000.00amount 我创建了一个临时表来取出数据,并更改了字段的结构,这很好。但现在我需要将数据放回临时表,因为临时表仍然具有原始的浮点字段,我只是无法使用insert select语句使其插入值 既然我的值没有超出我的类型的范围,我想知道为什么不能在select语句上强制转换如下:如何在sql server中将浮点字段转换为十进制?,sql,sql-server,Sql,Sql Server,我想将浮点字段转换为十进制字段;我希望我的decimal字段的精度为11,2,但当我试图更改字段的类型示例:Amount时,我遇到一个错误:算术溢出错误将float转换为数据类型numeric。 声明已终止。我的字段是表中的小数11,2,我的最大值和最小值是:1603837393.70-1688000000.00amount 我创建了一个临时表来取出数据,并更改了字段的结构,这很好。但现在我需要将数据放回临时表,因为临时表仍然具有原始的浮点字段,我只是无法使用insert select语句使其插
select Id,AccountId, cast(Amount as decimal(12,2)) as Amount,
cast(AmountB as decimal(12,2)) as AmountB
FROM myTable
我无法确定不转换字段的原因。请检查字段类型。它们是否正确?检查字段类型。他们说得对吗?你的问题简直令人困惑。你说我的字段是表中的小数11,2,但这与你所说的最大值和最小值相矛盾,它们不在小数11,2的范围内。如果您引用的错误来自您提供的SELECT查询,则Amount或AmountB的值超出了可由decimal12,2类型表示的值范围:-9999999999.99到9999999999.99 如果运行以下查询,您将发现此问题:
select
min(Amount) as minAmount,
max(Amount) as maxAmount,
min(AmountB) as minAmountB,
max(AmountB) as maxAmountB
from myTable
你的问题简直令人困惑。你说我的字段是表中的小数11,2,但这与你所说的最大值和最小值相矛盾,它们不在小数11,2的范围内。如果您引用的错误来自您提供的SELECT查询,则Amount或AmountB的值超出了可由decimal12,2类型表示的值范围:-9999999999.99到9999999999.99 如果运行以下查询,您将发现此问题:
select
min(Amount) as minAmount,
max(Amount) as maxAmount,
min(AmountB) as minAmountB,
max(AmountB) as maxAmountB
from myTable
但是1603837393.70的值总共需要12位小数,2-12位,小数点后2位 也许你误解了小数11,2的工作方式?这意味着总共有11位数字-小数点左侧9位,右侧2位 见: 十进制[p[,s]]和数字[p[,s]] p精度 小数点左侧和右侧可存储的最大小数位数总数
Marc但是1603837393.70的值需要12位小数,2-12位,小数点后2位 也许你误解了小数11,2的工作方式?这意味着总共有11位数字-小数点左侧9位,右侧2位 见: 十进制[p[,s]]和数字[p[,s]] p精度 小数点左侧和右侧可存储的最大小数位数总数
Marc你能从那个表格中发布一些数据吗?你能从那个表格中发布一些数据吗?谢谢你的解释。您澄清了我缺少的关于decimal数据类型的基本概念。很好地解释了我的误解。谢谢你的解释。您澄清了我缺少的关于decimal数据类型的基本概念。很好地解释了我的误解。