Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 使用浮点转换更改varchar列中的值_Sql Server - Fatal编程技术网

Sql server 使用浮点转换更改varchar列中的值

Sql server 使用浮点转换更改varchar列中的值,sql-server,Sql Server,我正在处理一个列为“value”且类型为varchar(100)的表。 必须将该列中的所有值乘以0.001进行更改,但由于“将varchar转换为数值类型时出现算术溢出错误”,我下面的更新脚本失败 我不能更改列的类型,它的值介于0和4294966796之间 如何正确转换以使更新中的计算生效 我尝试了cast(cast((value*0.001))作为float)作为varchar)但它仍然抛出错误。这里尝试一下: update testTable set value = cast ((cas

我正在处理一个列为“value”且类型为varchar(100)的表。 必须将该列中的所有值乘以0.001进行更改,但由于“将varchar转换为数值类型时出现算术溢出错误”,我下面的更新脚本失败

我不能更改列的类型,它的值介于0和4294966796之间

如何正确转换以使更新中的计算生效

我尝试了
cast(cast((value*0.001))作为float)作为varchar)
但它仍然抛出错误。

这里尝试一下:

update testTable
  set value = cast ((cast(value as float) * 0.001) as varchar);
如果仍然失败,则其中一行具有非数值

请尝试以下操作:

update testTable
  set value = cast ((cast(value as float) * 0.001) as varchar);
CAST(CAST( value AS NUMERIC) *0.001 AS VARCHAR(100))
如果仍然失败,则其中一行具有非数值

您可以

CAST(CAST( value AS NUMERIC) *0.001 AS VARCHAR(100))
update testTable cast(cast(value as decimal) * 0.001 as varchar(32))
你可以

update testTable cast(cast(value as decimal) * 0.001 as varchar(32))
单程

update testTable
  set value = convert(float,value) * 0.001
您可以运行的一个简单示例

DECLARE @z varchar(100)
SELECT @z = CONVERT(float,'123') * 0.001

SELECT @z
单向0.123

update testTable
  set value = convert(float,value) * 0.001
您可以运行的一个简单示例

DECLARE @z varchar(100)
SELECT @z = CONVERT(float,'123') * 0.001

SELECT @z

0.123

如果您的值超过了浮点的大小,那么您可以将算术作为字符串执行。这是一种特殊情况,因为乘以
0.001
只会将小数点向左移动三位。以下适用于大于1000的值,带或不带小数点:

update testTable
    set value = (case when charindex('.', value) = 0
                      then left(value, len(value) - 3)+'.'+right(value, 3)
                      else left(value, charidnex('.', value) - 3) + '.' +
                           replace(right(value, len(value) - charindex('.', value) + 4), '.', '')
                 end)

如果值小于100,则需要在值的前面加0,这样才能起作用。

如果值超过浮点大小,则可以作为字符串进行算术运算。这是一种特殊情况,因为乘以
0.001
只会将小数点向左移动三位。以下适用于大于1000的值,带或不带小数点:

update testTable
    set value = (case when charindex('.', value) = 0
                      then left(value, len(value) - 3)+'.'+right(value, 3)
                      else left(value, charidnex('.', value) - 3) + '.' +
                           replace(right(value, len(value) - charindex('.', value) + 4), '.', '')
                 end)
如果值小于100,则需要在值前面加0,这样才能工作