SQL Server中nvarchar转bigint报错,如何排除非数值型S_id?
解决SQL Server中NVARCHAR转bigint的类型转换错误及过滤无效值问题
一、避免转换错误的方法
如果不需要过滤无效值,只是想让转换语句不报错,可以用以下两种方式:
- 使用TRY_CONVERT函数(推荐,SQL Server 2012及以上版本支持)
这个函数在转换失败时会返回NULL,而非抛出错误,完美适配你的场景:
SELECT TRY_CONVERT(bigint, S_id) AS S_id_num FROM 你的表名
- 低版本SQL Server兼容方案(2012以下)
结合CASE和严格的字符匹配逻辑实现安全转换,确保只处理纯整数格式的字符串:
SELECT CASE WHEN S_id LIKE '[0-9]%' AND S_id NOT LIKE '%[^0-9]%' THEN CONVERT(bigint, S_id) ELSE NULL END AS S_id_num FROM 你的表名
注:这里用LIKE匹配纯数字字符,比ISNUMERIC更严格——ISNUMERIC会把带小数点、正负号甚至科学计数法的字符串判定为数值,如果你不需要这些情况,上述LIKE判断的准确性更高。
二、在SELECT语句中排除无效值
如果只需要查询能正常转换为bigint的记录,可以直接过滤掉转换失败的行:
- 高版本(2012+)简洁写法
利用TRY_CONVERT返回NULL的特性过滤:
SELECT S_id, TRY_CONVERT(bigint, S_id) AS S_id_num FROM 你的表名 WHERE TRY_CONVERT(bigint, S_id) IS NOT NULL
- 低版本兼容写法
用纯数字匹配条件过滤:
SELECT S_id, CONVERT(bigint, S_id) AS S_id_num FROM 你的表名 WHERE S_id LIKE '[0-9]%' AND S_id NOT LIKE '%[^0-9]%'
内容的提问来源于stack exchange,提问作者Sca
相关产品推荐
相关产品推荐

