sqlserver中,case when then 不同類型數值的轉換(case 字段 when int then varchar end)

數據庫:sqlserver;

錯誤案例:(status爲int類型)select *,(case status when 0 then '正常' when 1 then '刪除' else status end) as status from tb;

錯誤信息:在將 varchar 值 '正常' 轉換成數據類型 int 時失敗。

原因分析:簡單來說,不同類型數值不能轉換。按照“數據類型優先級”規則,case表示式中最高優先級的數據類型決定了表達式返回值的數據類型。“數據類型優先級”規則可以在SQL Server Books Online(BOL)找到,它規定了int數據類型的優先級要比nvarchar數據類型高。

解決思路:case when then配合cast/convert,先將int類型轉換成varchar類型。

cast/convert:將某種數據類型的表達式顯式轉換爲另一種數據類型。例:cast(status as varchar(64)),將int類型的status轉換成varchar類型;

解決方法:select a.* ,(case a.status when 0 then '正常' when 1 then '刪除' else a.status end) as status from
(select *,cast(status as varchar(64)) status from tb) a;

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