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

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

发现两个字段 一个是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)

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

你可能感兴趣的:(sql,数据库)