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