Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql server中将浮点字段转换为十进制?_Sql_Sql Server - Fatal编程技术网

如何在sql server中将浮点字段转换为十进制?

如何在sql server中将浮点字段转换为十进制?,sql,sql-server,Sql,Sql Server,我想将浮点字段转换为十进制字段;我希望我的decimal字段的精度为11,2,但当我试图更改字段的类型示例:Amount时,我遇到一个错误:算术溢出错误将float转换为数据类型numeric。 声明已终止。我的字段是表中的小数11,2,我的最大值和最小值是:1603837393.70-1688000000.00amount 我创建了一个临时表来取出数据,并更改了字段的结构,这很好。但现在我需要将数据放回临时表,因为临时表仍然具有原始的浮点字段,我只是无法使用insert select语句使其插

我想将浮点字段转换为十进制字段;我希望我的decimal字段的精度为11,2,但当我试图更改字段的类型示例:Amount时,我遇到一个错误:算术溢出错误将float转换为数据类型numeric。 声明已终止。我的字段是表中的小数11,2,我的最大值和最小值是:1603837393.70<->-1688000000.00amount

我创建了一个临时表来取出数据,并更改了字段的结构,这很好。但现在我需要将数据放回临时表,因为临时表仍然具有原始的浮点字段,我只是无法使用insert select语句使其插入值

既然我的值没有超出我的类型的范围,我想知道为什么不能在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数据类型的基本概念。很好地解释了我的误解。