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

16

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

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

Select Cast([Column1] as INT) 

Column1是Varchar(21) NOT NULL类型的,我想将其转换为Int。 实际上,我正在尝试将Column1插入到另一个具有INT字段的表中。 有人可以帮我进行转换吗?

7个回答

25

对于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清理您的数据。


根据您的评论,您可以在cast的一部分中使用REPLACE

select cast(replace(replace(@v3, char(13), ''), char(10), '') as int)
如果这是经常发生的事情,最好清理数据并修改表格填充方式,在输入之前去除CRLF

是的,你说得对,在“@v3”处的条件与我的情况相同。有没有办法或解决方案可以将它从varchar转换为int? - Vikrant More
@VikrantMore,我更新了我的答案,包括使用“REPLACE”来删除“CRLF”。 - Jeff Ogata

10

你可以使用转换函数:

Select convert(int,[Column1])

2

这就是你应该做的,它是否抛出了一个错误?你确定你尝试转换的值可以被转换吗?由于明显的原因,你不能将 abc123 转换成整数。

更新:

根据你的评论,我会移除任何尝试转换的值中的空格。


@AbeMiessler 是的,我的那一列中的值是66或2,没有单个字符,但只有左侧尾随空格。 - Vikrant More
1
它抛出了什么错误?你确定里面没有空格吗? - Abe Miessler
可能存在任何NULL值吗? - Eric
1
但是列中的所有值在表中都是整数吗?根据转换在查询中的位置,它可能正在尝试将不会出现在最终结果集中的值进行转换。请发布实际查询而不仅仅是片段。 - HLGEM
@AbeMiessler,这里有一些带有空格的左侧尾随内容... 我将使用 LTRIM 进行转换。 - Vikrant More

1

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

如果您有任何NULL值,请使用

ISNULL(column1, 0)

是的,我知道ISNULL函数,但我们那里没有任何空值,我们必须手动将它从字符型转换为整型。 - Vikrant More
1
他声称该列已经强制为NOT NULL - Abe Miessler
我正在使用Select convert(int,'Au'),但仍然出现转换失败错误。有什么线索吗?谢谢 - Richa Sachdev

0
尝试以下代码。在大多数情况下,这是由于逗号问题引起的。
cast(replace([FIELD NAME],',','') as float)

0

尝试使用以下命令,它将要求所有值为INT类型:

select case when isnumeric(YourColumn + '.0e0') = 1 then cast(YourColumn as int) else NULL end /* case */ from YourTable


0

SQL中有两种类型的转换方法。

CAST和CONVERT具有类似的功能。CONVERT是特定于SQL Server的,允许在日期和时间值、小数、货币标识之间进行更广泛的灵活性转换。CAST是这两个函数中更符合ANSI标准的。

使用Convert

Select convert(int,[Column1])

使用类型转换

Select cast([Column1] as int)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接