SQL中int类型与varchar类型的隐式转换
如果你對SQL使用的經(jīng)驗不是足夠豐富,如果你在SQL中解決的問題不夠多,請認真看完本章,它可以讓你避免一個很可能經(jīng)常會犯的錯誤!
我們先創(chuàng)建一個測試表
create table #table1 ( id int identity(1,1) primary key, col1 int not null, col2 decimal(18,1) )
然后插入數(shù)據(jù)
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語句的結(jié)果
select * from #table1 where col1< >''
心細的朋友可能要說了,上面這個SQL肯定報錯啊,col1是int類型,怎么能和''這個varchar類型的值來比較了。但是朋友你錯了,上面的SQL是能夠查出結(jié)果集的,查詢結(jié)果如下: id? col1 col2 2??? 1??? 1.1 3??? 2??? 2.2 4??? 3??? 3.3
這是怎么回事呢?我們只要做一個測試就知道了,請執(zhí)行下面語句:
select convert(int,'')
查詢結(jié)果如下: 無列名 ?0
呵呵,朋友們知道了吧,''在SQL中是能夠隱式轉(zhuǎn)換為int型的,轉(zhuǎn)化后的值為0,所以我們上面的select語句其實就等于
select * from #table1 where col1< >0
心細的朋友可能又在想了,既然''可以隱式轉(zhuǎn)換為int類型,那么肯定也可以轉(zhuǎn)換為decimal類型,呵呵,這樣想的朋友又錯了。
select * from #table1 where col2< >''
上面SQL執(zhí)行會報如下錯誤: 從數(shù)據(jù)類型 varchar 轉(zhuǎn)換為 numeric 時出錯。
也就是說,''是不能夠隱式轉(zhuǎn)換為decimal類型的。
總結(jié): 1,在SQL查詢中,對int列進行與''值對比時,''會隱式轉(zhuǎn)化為0, 即 select * from #table1 where col1< >'' 等同于 select * from #table1 where col1< >0 2,將''與decimal列對比,會報錯類型轉(zhuǎn)換錯誤。
注意: 以上所有代碼小編均在SQL SERVER2005中測試,其它版本未測試過. 以上結(jié)論為小編在實際操作中測試出來的,暫還不知其中原因,等小編找到其中原由后會在本站發(fā)布,敬請關(guān)注小站!???????????????????????????
?
轉(zhuǎn)載于:https://www.cnblogs.com/zxktxj/archive/2012/06/12/2546710.html
總結(jié)
以上是生活随笔為你收集整理的SQL中int类型与varchar类型的隐式转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 滚动切换
- 下一篇: SQL Server 2008 无法删除