我正在使用 SQL Server 2019。
select convert(bigint, ' ')
回報 0
select convert(numeric, ' ')
回傳:
將資料型別 varchar 轉換為數字時出錯。
誰能告訴我為什么這兩種資料型別之間的行為不同?我原以為第二個示例回傳0or 0.00。
uj5u.com熱心網友回復:
從CAST 和 CONVERT:
"當空字串 (" ") 轉換為numericor時,SQL Server 也會回傳錯誤decimal。"
這是記錄在案的行為,這就是原因。
uj5u.com熱心網友回復:
這只是它的實施方式。將空字串或只有空格的字串轉換為INT資料型別將導致0. 有些人認為這是合乎邏輯的行為,有些人則不然。
對于一個DECIMAL型別,相同的轉換失敗。
但是,這僅適用于空間!嘗試將其他空白字符(如制表符、回車符或換行符)轉換為某種INT型別也會失敗。
如果您希望失敗的強制轉換回傳NULL而不是產生錯誤,您可以使用TRY_CONVERT代替:
select try_convert(numeric, ' ')
如果您希望兩者都以相同的方式行事(無論這意味著都回傳NULL還是都回傳0或0.0分別),您需要以某種方式解決它。
要讓演員INT回傳NULL,您可以例如將TRY_CONVERT與NULLIF結合使用:
select try_convert(bigint, nullif(' ', ''))
這也將生成NULL僅包含(任意數量)空格的字串。
另一方面,如果您希望0.0在強制轉換為時看到空字串或僅包含空格的字串的結果NUMERIC,則可以明確地過濾掉這些結果:
select case when val like ' ' or val = '' then 0.0
else try_convert(numeric(5,1), val)
end as val
from strings
這個 db<>fiddle顯示了各種空白和非空白字串輸入的不同查詢產生的結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368492.html
標籤:sql sql-server 查询语句
