SQL中varchar转int失败时返回0而非NULL或错误的实现方法
解决Varchar转整数失败时返回0的问题
嘿,我来帮你搞定这个转换需求!你需要把长度11-12位的varchar转成整数做运算,而且任何转换失败的情况都要返回0,不能报错也不能返回NULL对吧?
你之前用CAST的问题在于,碰到非数字字符串会直接抛出错误,而TRY_PARSE处理NULL时也有问题。这里推荐用**TRY_CAST(或TRY_CONVERT)配合ISNULL**的组合,完美满足你的要求:
核心思路
TRY_CAST:和CAST功能类似,但转换失败时不会报错,而是返回NULLISNULL:把TRY_CAST返回的NULL替换成0,确保最终结果永远是有效数字
全场景测试的示例代码
-- 处理NULL值 SELECT ISNULL(TRY_CAST(NULL AS INT), 0); -- 返回 0 -- 处理空字符串 SELECT ISNULL(TRY_CAST('' AS INT), 0); -- 返回 0 -- 处理有效数字 SELECT ISNULL(TRY_CAST('42' AS INT), 0); -- 返回 42 -- 处理非数字字符串 SELECT ISNULL(TRY_CAST('abc' AS INT), 0); -- 返回 0 -- 处理11位数字字符串 SELECT ISNULL(TRY_CAST('12345678901' AS INT), 0); -- 返回 12345678901 -- 处理12位数字(超过INT范围时,建议转BIGINT) SELECT ISNULL(TRY_CAST('123456789012' AS BIGINT), 0); -- 返回 123456789012
额外说明
- 注意
INT类型的最大值是2147483647(10位数字),你的11-12位数字肯定超过这个范围,所以一定要换成BIGINT类型,避免因为数值过大导致转换失败返回NULL。 - 你也可以用
COALESCE代替ISNULL,效果完全一样:SELECT COALESCE(TRY_CAST('abc' AS INT), 0);,COALESCE的优势是可以同时处理多个可能的NULL值,但这里用哪个都没问题。
这样不管是NULL、空字符串、非数字还是有效数字,最终都能得到你想要的结果,而且不会抛出任何错误~
内容的提问来源于stack exchange,提问作者Marcel
相关产品推荐
相关产品推荐

