SQL Server将varchar转换为int

时间:2011-10-24 20:37:02

标签: tsql sql-server-2008

我有一个表'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?

2 个答案:

答案 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列的原始定义