SQL中int类型与varchar类型的隐式转换
如果你對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
總結
以上是生活随笔為你收集整理的SQL中int类型与varchar类型的隐式转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 滚动切换
- 下一篇: SQL Server 2008 无法删除