您的位置:首页 > 数据库

让我震惊的SqlServer 对 ''特殊的处理

2016-06-15 08:21 465 查看
今天书写公司项目是,取得某个表中某个字段(这个字段的类型为int,而且不是自增长,也非主键)为空的信息,正常的sql为:select * from 表名 where 字段 is null,这样就能得到正常的信息,但是 稍微修改了一下sql :select * from 表名 where 字段 is null or 字段=”, 理论情况是改sql报错,因为字段为int类型。可是现实情况为比原来的信息又多了一条数据。然后就把sql直接改成了:select * from 表名 where 字段=” ,这下结果让我震惊了,出来一条该字段值为0的一条数据。

我百思不得期间,就单独建了一张表,进行单独测试,表结果如下:



然后插入几条数据(为null就不列举了,因为能够查询出来):


然后执行SQL(select * from Table1 where id=”)查询得到结果如下:



在这一步我表示十分震惊,想不通这是为什么?经过一番冷静,思考,认为SqlServer对‘’进行特殊处理进行转换为0,便执行如下sql(select cast(” as int) from Table1)进行验证:


经过google查询得到了我的印证,sqlserver 隐式转换,不信你搜:https://msdn.microsoft.com/zh-cn/library/ms187928(v=sql.105).aspx。然后找到隐式转换,就可以得到证明,个人建议把这篇文章看完,十分有收获。

顺带打个小广告,家里人开的淘宝店,链接为(http://shop121275747.taobao.com/),新店冲冠,实惠多多,全场包邮,欢迎光临。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: