问题描述
我有一列是varchar(80)并存储美元金额(没有$符号)。我想通过添加其他金额来更新值,例如现有金额是96.73,我想加1.00来达到97.73。
我尝试了转换并没有任何运气。我尝试过:
set CAVALUETEXT = convert(INT,CAVALUETEXT) + 1.00
set CAVALUETEXT = cast(cavaluetext as int) + 1.00
并得到相同的错误:
将varchar值'96 .73'转换为数据类型int时转换失败。
我认为我正在使用SQL Server 2008。
解决方法
您可以强制转换为DECIMAL
,进行算术运算,然后强制转换回VARCHAR
:
UPDATE yourTable
SET CAVALUETEXT = CAST(
CAST(CAVALUETEXT AS DECIMAL(19,2)) + 1.00 AS VARCHAR(21));
但是,这里更好的方法是停止在文本列中存储货币金额,尤其是可能需要进行算术运算的金额。为此使用适当的类型,例如DECIMAL(19,2)
。
您可以使用CONVERT(float,[YOUR Varchar])
。例如,CONVERT(float,'0.123')
将其转换为浮点数0.123
。这仅适用于SQL Server。