我有一个表,它有一个“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 去
如何将值强制转换/转换为int,执行数学运算,然后再次设置为varchar?
发布于 2011-10-25 04:43:09
Martin Smith的观点很好-->如果它只是数字数据,而你总是要做这样的操作,它将节省你的时间和麻烦,而不必做这些转换工作。
尽管如此,你还是可以-
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列的原始定义
发布于 2011-10-25 04:42:08
您需要使用CAST两次--一次是将Value列变成INT,这样就可以从其中减去1,然后再返回到VARCHAR(x)
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语法,它更具表现力(更易于阅读和理解),并有助于避免不需要的笛卡尔产品(通过忘记在WHERE子句中指定连接条件...)
https://stackoverflow.com/questions/7881683
复制相似问题