SQL Server SQL错误:将varchar值,“”转换为数据类型int时转换失败

pqwbnv8z  于 2022-12-17  发布在  其他
关注(0)|答案(2)|浏览(725)

这个问题让我头疼不已。我一直在犯错误。我遵循了其他问题的解决方案,但没有一个对我有效。我真的希望有人能在这里纠正我。
我只想从视图中获取数据

SELECT Table_view.Information
FROM Table_View

但我一直收到这个错误
将varchar值,“”转换为int数据类型时转换失败
我尝试了以下方法:

SELECT Table_View.Information
FROM Table_View
WHERE Table_View.Information NOT LIKE '%,%'

SELECT Table_View.Information
CASE WHEN CAST(Table_View.Information AS INT) = 1 THEN 'space' 
ELSE CONVERT(VARCHAR, Table_View.Information) END
FROM Table_View

SELECT CAST (REPLACE(REPLACE(Table_View.Information, ' ,', ' '),'/', '') AS VARCHAR)
FROM Table_View

SELECT CONVERT(VARCHAR, REPLACE(REPLACE(Table_View.Information, ' ,', ' '),'/', ''))
FROM Table_View

SELECT Table_View.Information
CASE 
WHEN Table_View.Information NOT LIKE '%,%' THEN CAST(Table_View.Information AS VARCHAR)
END 

FROM Table_View

以上都没有帮助我解决这个问题。有什么建议吗?我试过转换,转换,大小写,替换。

qoefvg9y

qoefvg9y1#

显然,如果是2012年以上,则应该使用try_convert()try_cast()。如果转换失败,则返回NULL,而不是抛出错误。
也就是说,转换(金钱,...)倾向于更宽容一点

示例

Declare @Table table (SomeCol varchar(50))  
Insert Into @Table values 
 ('$25.25')
,('-  252,525.25')

Select AsMoney = convert(money,SomeCol)  -- int would fail
 From  @Table

退货

AsMoney
25.25
-252525.25
nfs0ujit

nfs0ujit2#

WHERE Table_View.Information NOT LIKE '%,%'

上面的代码意味着Information是一个字符列,因为不可能将逗号转换为数字。

CASE WHEN CAST(Table_View.Information AS INT) = 1 THEN 'space'

这里有一个错误,因为CAST没有提供一个返回值,这样它就可以与数字1进行比较,如果该值包含一个逗号,那么任何转换为int的尝试都会导致类型转换错误。
尝试使用ISNUMERIC()TRY_CAST()来代替CAST。

相关问题