博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL中int类型与varchar类型的隐式转换
阅读量:4336 次
发布时间:2019-06-07

本文共 1130 字,大约阅读时间需要 3 分钟。

如果你对SQL使用的经验不是足够丰富,如果你在SQL中解决的问题不够多,请认真看完本章,它可以让你避免一个很可能经常会犯的错误!

我们先创建一个测试表

create table #table1 ( id int identity(1,1) primary key, col1 int not null, col2 decimal(18,1) )

然后插入数据

insert into #table1 (col1,col2) select 0,0.1 union all select 1,1.1 union all select 2,2.2 union all select 3,3.3

我们来猜猜下面Select语句的结果

select * from #table1 where col1< >''

心细的朋友可能要说了,上面这个SQL肯定报错啊,col1是int类型,怎么能和''这个varchar类型的值来比较了。但是朋友你错了,上面的SQL是能够查出结果集的,查询结果如下: id  col1 col2 2    1    1.1 3    2    2.2 4    3    3.3

这是怎么回事呢?我们只要做一个测试就知道了,请执行下面语句:

select convert(int,'')

查询结果如下: 无列名  0

呵呵,朋友们知道了吧,''在SQL中是能够隐式转换为int型的,转化后的值为0,所以我们上面的select语句其实就等于

select * from #table1 where col1< >0

心细的朋友可能又在想了,既然''可以隐式转换为int类型,那么肯定也可以转换为decimal类型,呵呵,这样想的朋友又错了。

select * from #table1 where col2< >''

上面SQL执行会报如下错误: 从数据类型 varchar 转换为 numeric 时出错。

也就是说,''是不能够隐式转换为decimal类型的。

总结: 1,在SQL查询中,对int列进行与''值对比时,''会隐式转化为0, 即 select * from #table1 where col1< >'' 等同于 select * from #table1 where col1< >0 2,将''与decimal列对比,会报错类型转换错误。

注意: 以上所有代码小编均在SQL SERVER2005中测试,其它版本未测试过. 以上结论为小编在实际操作中测试出来的,暂还不知其中原因,等小编找到其中原由后会在本站发布,敬请关注小站!                           

 

转载于:https://www.cnblogs.com/zxktxj/archive/2012/06/12/2546710.html

你可能感兴趣的文章
Http协议的学习
查看>>
【转】轻松记住大端小端的含义(附对大端和小端的解释)
查看>>
设计模式那点事读书笔记(3)----建造者模式
查看>>
ActiveMQ学习笔记(1)----初识ActiveMQ
查看>>
Java与算法之(2) - 快速排序
查看>>
Windows之IOCP
查看>>
机器学习降维之主成分分析
查看>>
WebSocket & websockets
查看>>
openssl 升级
查看>>
ASP.NET MVC:通过 FileResult 向 浏览器 发送文件
查看>>
CVE-2010-2883Adobe Reader和Acrobat CoolType.dll栈缓冲区溢出漏洞分析
查看>>
使用正确的姿势跨域
查看>>
AccountManager教程
查看>>
Android学习笔记(十一)——从意图返回结果
查看>>
算法导论笔记(四)算法分析常用符号
查看>>
ultraedit激活
查看>>
总结(6)--- python基础知识点小结(细全)
查看>>
亿级曝光品牌视频的幕后设定
查看>>
ARPA
查看>>
JSP开发模式
查看>>