SQL中where 整數=空字符串(sqlserver及mysql均如此)

總結:ms sqlserver 以及 mysql int類型和字符串進行比較時,會將字符串進行int轉換。

劃重點:intcloumn=''時,空字符串等價於0,即intcloumn=0

昨天同事突然貼了一個sql代碼段

說明:where條件中DeleteMark int類型 允許null

疑問:爲什麼查詢條件中字段爲int類型,查詢條件爲空字符串的時候,會把DeleteMark=0的查詢出來了呢?

於是我做了一個簡單的判斷sql

if 0=''
begin
select 1
end
else
begin
select 2
end

發現微軟的sqlserver 在整數類型和字符串進行比較時,確實做了空字符串 等價於 0的處理。

然後好奇的我查看了sql執行計劃,發現如下:

真相大白,查詢條件將字符串進行了convert_implicit 類型轉換。

喜歡深入鑽研的小夥伴,可以再繼續深入下去,看下convert_implicit底層實現。

然後我又實驗了mysql,也是如此。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章