我有一个表'Value'是varchar的表。一行在此列中放置一个“10”。这个“数字”需要添加和减去,但我可以直接b / c它的varchar。 因此,以下内容给出了错误:
update Fields
set Value = Value - 1
from Fields f, FTypes ft
where ft.Name = 'Field Count'
and ft.ID = f.ID_FT
and f.ID_Project = 186
GO
如何将值转换/转换为int,执行数学运算,然后再次设置为varchar?
答案 0 :(得分:3)
您需要使用CAST
两次 - 一次使Value
列成为INT
,这样您就可以从中减去1,然后再回到VARCHAR(x)
:< / p>
update dbo.Fields
set Value = CAST((CAST(Value AS INT) - 1) AS VARCHAR(20))
from dbo.Fields f
inner join dbo.FTypes ft ON ft.ID = f.ID_FT
where ft.Name = 'Field Count'
and f.ID_Project = 186
另外,我建议在所有数据库对象上始终使用dbo.
前缀,我总是争论新的ANSI标准JOIN语法,它更具有表达(更清晰)阅读和理解)并帮助避免不需要的笛卡尔积(通过忘记在WHERE子句中指定JOIN条件......)
答案 1 :(得分:3)
Martin Smith的观点非常出色 - &gt;如果它只是那里的数字数据并且你总是会做这样的操作,它将节省你的时间和麻烦,不必进行这种转换工作。
据说你可以做 -
update Fields
set ColumnName = cast( (cast(ColumnName as int) - 1) as varchar(nn))
from Fields f, FTypes ft
where ft.Name = 'Field Count'
and ft.ID = f.ID_FT
and f.ID_Project = 186
其中nn是varchar列的原始定义