让我震惊的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的一条数据。
我百思不得期间,就单独建了一张表,进行单独测试,表结果如下:
![](http://img.blog.csdn.net/20160615081748159)
然后插入几条数据(为null就不列举了,因为能够查询出来):
![](http://img.blog.csdn.net/20160615081822870)
然后执行SQL(select * from Table1 where id=”)查询得到结果如下:
![](http://img.blog.csdn.net/20160615081900628)
在这一步我表示十分震惊,想不通这是为什么?经过一番冷静,思考,认为SqlServer对‘’进行特殊处理进行转换为0,便执行如下sql(select cast(” as int) from Table1)进行验证:
![](http://img.blog.csdn.net/20160615082002232)
经过google查询得到了我的印证,sqlserver 隐式转换,不信你搜:https://msdn.microsoft.com/zh-cn/library/ms187928(v=sql.105).aspx。然后找到隐式转换,就可以得到证明,个人建议把这篇文章看完,十分有收获。
顺带打个小广告,家里人开的淘宝店,链接为(http://shop121275747.taobao.com/),新店冲冠,实惠多多,全场包邮,欢迎光临。
我百思不得期间,就单独建了一张表,进行单独测试,表结果如下:
然后插入几条数据(为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/),新店冲冠,实惠多多,全场包邮,欢迎光临。
相关文章推荐
- 数据库总结2
- Sql server使用Merge关键字做插入或更新操作
- MySQL字符集的校对规则(collation rule)
- oracle 数据中文出现乱码 ???
- SQLite
- ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist Linux Error: 2: No suc
- asp.net 连接oracle 数据库-OracleClient使用
- MYSQL数据库导入数据时出现乱码的解决办法
- win2008 R2中安装MySQL出现ODBC连接器安装错误
- Redis3.0 配置文件说明
- SqlServer主键外键添加及判断表是否存在
- mysql 5.7.13 winx64安装配置方法图文教程
- 对mysql数据库的操作
- 关于数据字典的常用SQL文
- 免安装Oracle客户端软件-使用pl/sql配置登陆
- DBA应该掌握的SQL语句(二)
- flume+kafka+storm+mysql架构设计
- 登陆pl/sql developer
- 关于数据字典的常用SQL文
- DBA应该掌握的SQL语句(二)