首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server将varchar转换为int

问SQL Server将varchar转换为int
EN

Stack Overflow用户
提问于 2011-10-25 04:37:02
回答 2查看 5.9K关注 0票数 0

我有一个表,它有一个“Value”列,它是一个varchar。一行将在此列中放置一个'10‘。这个“数字”将需要加减,但我可以直接b/c它的一个varchar。因此,以下代码会给出一个错误:

代码语言:javascript
复制
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?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-25 04:43:09

Martin Smith的观点很好-->如果它只是数字数据,而你总是要做这样的操作,它将节省你的时间和麻烦,而不必做这些转换工作。

尽管如此,你还是可以-

代码语言:javascript
复制
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列的原始定义

票数 3
EN

Stack Overflow用户

发布于 2011-10-25 04:42:08

您需要使用CAST两次--一次是将Value列变成INT,这样就可以从其中减去1,然后再返回到VARCHAR(x)

代码语言:javascript
复制
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子句中指定连接条件...)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7881683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档