2011-11-01 141 views
11

如何在SQL Server 2008中将Varchar转换为Int。如何将SQL Server 2008中的Varchar转换为Int?

我有以下代码,当我试图运行它时,不会允许我将Varchar转换为Int。

Select Cast([Column1] as INT) 

Column1是Varchar(21)NOT NULL类型,我想将它转换为Int。 实际上,我正试图将Column1插入到另一个表中,将Field作为INT。 有人可以帮我转换吗?

回答

13

空间将不会成为一个问题cast,但字符,如TABCRLF将显示为空格,不会被LTRIMRTRIM进行修整,并会成为一个问题。

例如尝试以下操作:

declare @v1 varchar(21) = '66', 
     @v2 varchar(21) = ' 66 ', 
     @v3 varchar(21) = '66' + char(13) + char(10), 
     @v4 varchar(21) = char(9) + '66' 

select cast(@v1 as int) -- ok 
select cast(@v2 as int) -- ok 
select cast(@v3 as int) -- error 
select cast(@v4 as int) -- error 

检查您输入这些字符,如果你找到他们,用REPLACE清理您的数据。


根据您的意见,您可以使用REPLACE为您cast的一部分:

select cast(replace(replace(@v3, char(13), ''), char(10), '') as int) 

如果这一点是要经常发生的事情,这将是更好地清理数据和修改填入表格以删除输入前的CRLF

+0

是的,你在'@ v3'是正确的与我的情况是相同的条件是否有任何方式或解决方案,以便我们可以将其从varchar转换为int? –

+0

@VikrantMore,更新了我的答案,包括使用'REPLACE'来删除'CRLF'。 –

2

这就是你会怎么做的,它是抛出一个错误?你确定你试图转换的价值是可兑换的吗?由于显而易见的原因,您不能将abc123转换为int。

UPDATE

根据您的意见我会删除那些你正试图转换的值的任何空间。

+0

@AbeMiessler/ 是我的在列中的值是66或2没有单一的字符,但出现了一个只留下尾随空白空间。 –

+1

它抛出了什么错误?你确定那里没有空格吗? –

+0

有没有可能的NULL值? – Eric

1

只要您没有任何字母字符或NULL值,这是将其转换为INT的正确方法。

如果您有任何NULL值,使用

ISNULL(column1, 0) 
+0

是的,我知道ISNULL,但我们没有任何空值,我们必须手动将它从Varchar转换为Int。 –

+1

他声称该列上强制执行了NOT NULL。 –

+0

我正在使用Select convert(int,'Au')但仍然收到转换失败错误。 任何线索? 谢谢 –

8

您可以使用转换功能:

Select convert(int,[Column1]) 
0

试试下面的代码。在大多数情况下,它是由逗号问题引起的。

cast(replace([FIELD NAME],',','') as float) 
0

尝试用下面的命令,它会要求所有的值设置为INT

选择的情况下,当ISNUMERIC(YourColumn +”。0E0' )= 1 然后浇铸(YourColumn作为INT) 别的NULL 端/ * *的情况下从YourTable

相关问题