SQL “varchar转换为numeric时出错” 的小插曲

在数据分析过程中,遇到varchar转numeric错误。检查发现非空值且不含非法字符。使用ISNUMERIC函数判断所有行皆为有效数值。最终发现问题在于数值中包含逗号作为分隔符。通过将逗号替换为空解决了问题,增加了处理此类问题的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作小插曲

今天在做数据分析时出现了一个小问题:在统计金额总数时的问题。常见错误了,小case~
根据我从业这么多“资深经验” ,一般出现这个错误是由两个原因。
第一种,有空值。这应该是varchar类型的值有个别为空,但是是用“NULL”表示的,所以才会出现这个错误。经过排查判断,不是这个原因。
第二种我认为可能是有个别的存在英文或者别的字符,于是我就使用了:

SELECT * from [表名] WHERE PATINDEX('%[^0-9]%',[列名]) != 0

进行判断。得出的结果让我傻眼 =-=!(图中应该是 !=0 去判断问题行)

吓人
总共37w行,排除掉图中的23W行没问题的,剩下14w+的问题行,根本没法去对。
(其实这里包含了负数的负号“-”和小数的小数点“.”,都算了进去,才会有这么多。正确的应该在正表里这么写:’%[^0-9|\.|\-]%’。这之后我又试验了一下,总共才58行问题行。)

后来我到网上搜索,发现可以用ISNUMERIC去判断是否为有效的可计算值,我就赶忙实践一下,结果让人心碎ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值