如何在SQL Server 2008中将Varchar转换为Int。
当我尝试运行以下代码时,它不允许我将Varchar转换为Int。
Select Cast([Column1] as INT)
Column1是Varchar(21) NOT NULL类型的,我想将其转换为Int。 实际上,我正在尝试将Column1插入到另一个具有INT字段的表中。 有人可以帮我进行转换吗?
如何在SQL Server 2008中将Varchar转换为Int。
当我尝试运行以下代码时,它不允许我将Varchar转换为Int。
Select Cast([Column1] as INT)
Column1是Varchar(21) NOT NULL类型的,我想将其转换为Int。 实际上,我正在尝试将Column1插入到另一个具有INT字段的表中。 有人可以帮我进行转换吗?
对于cast
来说,空格不是问题,然而像TAB
、CR
或LF
这样的字符将会被视为空格,并且不会被LTRIM
或RTRIM
去除,这会造成问题。
例如,尝试以下操作:
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
清理您的数据。
根据您的评论,您可以在cast
的一部分中使用REPLACE
:
select cast(replace(replace(@v3, char(13), ''), char(10), '') as int)
如果这是经常发生的事情,最好清理数据并修改表格填充方式,在输入之前去除CR
和LF
。你可以使用转换函数:
Select convert(int,[Column1])
这就是你应该做的,它是否抛出了一个错误?你确定你尝试转换的值可以被转换吗?由于明显的原因,你不能将 abc123
转换成整数。
更新:
根据你的评论,我会移除任何尝试转换的值中的空格。
只要您没有任何字母字符或NULL值,那么这就是将其转换为INT的正确方式。
如果您有任何NULL值,请使用
ISNULL(column1, 0)
NOT NULL
。 - Abe Miesslercast(replace([FIELD NAME],',','') as float)
尝试使用以下命令,它将要求所有值为INT类型:
select case when isnumeric(YourColumn + '.0e0') = 1 then cast(YourColumn as int) else NULL end /* case */ from YourTable
SQL中有两种类型的转换方法。
CAST和CONVERT具有类似的功能。CONVERT是特定于SQL Server的,允许在日期和时间值、小数、货币标识之间进行更广泛的灵活性转换。CAST是这两个函数中更符合ANSI标准的。
使用Convert
Select convert(int,[Column1])
使用类型转换
Select cast([Column1] as int)