我有一个varchar(255(格式的列。该列有数值和NULL值。我需要将列转换为整数格式,但由于NULL值,它失败了。我在网上查过,这个问题在很多地方都有提及。但我似乎找不到正确的解决方案。该解决方案必须在Microsoft SQL server环境中运行。
我试过这个:
CAST(varcharname AS INT) AS varname
CAST(CASE WHEN varcharname IS NOT NULL THEN varcharname ELSE NULL END AS INT) AS varname
CAST(NULLIF(varcharname , '') AS INT) AS varname
CAST(NULLIF(varcharname , NULL) AS INT) AS varname
问题不在于零值,我可以证明这一点:
https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=c6734d0967eae022b0af2ee3a2b694db
列中更有可能有其他内容无法进行转换。也许是一些空白?请记住,空字符串与NULL不同,只有空格的字符串与空字符串也不同。
试试这个:
cast(nullif(rtrim(varcharname),'') as int)
需要考虑的另一件事是,如果列中有更多数据,并且您使用WHERE
子句限制结果。
例如,假设您有以下数据:
id | varcharname |
---|---|
1 | '1' |
2 | 空 |
3 | '3' |
4 | '4' |
5 | 'Five' |