日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2025/7/25 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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类型的隐式转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。