欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » SQLServer教程 » 正文

热门阅读

重要:SQL中int类型与varchar类型的隐式转换

创建时间:2011年09月09日 23:09  阅读次数:(16930)
分享到:
如果你对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中测试,其它版本未测试过.
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论1条
  • #1楼  评论人:小草  评论时间:2013-5-21 9:24:19
  • 我看了
发表评论:
留言人:
内  容:
请输入问题 18+33=? 的结果(结果是:51)
结  果: