sql 数据类型隐藏坑:nvarchar 的空 会匹配 int 的 0

文章讨论了在操作数据库时,遇到nvarchar和int字段存储相同序号的问题,发现空的nvarchar被隐式转换为0并与int的0匹配。作者建议在比较之前进行类型转换,并处理空值,如使用CASEWHEN语句将空值转换为-1以避免潜在错误。

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

最近朋友在操作数据的时候,

发现两个字段 一个是nvarchar 一个是int 其实两个字段存的都是序号,当两个都有值的时候直接比较是没有问题的

但是nvarchar是空的时候 注意不是null, 发现他居然可以跟int 的0 匹配

也就是底层 隐式的转换,  把nvarchar的空当成0了

为了防止这种情况,首先做的是先把nvarchar转int 其次这种空和null 也要考虑,比如当空的时候把他转为-1等其他方法

(CASE WHEN a= '' or a IS NULL THEN -1 ELSE CAST( a  AS INT) END)

这也告诉我们 以后在处理数据的时候 最好先考虑是否同一类型,其次比较独特的情况也需要处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值