SQL Server 資料型態轉換

在 SQL Server 中可以使用 CAST 函式將資料型態做轉換。

下面的範例是產生 A 和 B 兩個欄位,兩個都是數字 0 ,但是 B 欄位會將 0 轉換為字串的格式:
    
SELECT 0                      AS A
     , CAST(0 AS VARCHAR(10)) AS B
    

查詢結果如下:
(在有些編輯器中可以看到差異,數字會靠右,字串會靠左)
    
+---+---+
|A  |B  |
+---+---+
|  0|0  |
+---+---+
    

平時在使用 IIF 或是 CASE WHEN 時可能會遇到以下情境,想要將 MyTable 的 MyColumn 欄位依據內容轉換,例如 MyColumn 的值是 1 就顯示「通過」,其他就顯示原本的內容:
    

select (case
            when MyColumn = 1 then '通過'
            else MyColumn
    end
           ) as 狀態
from MyTable;

    

但是會出現以下錯誤:
    
[S0001][245] Line 1: 在目前命令 (完成狀態 0) 期間發生錯誤。將 varchar 值 '通過' 轉換成資料類型 int 時,轉換失敗。
    

原因是因為 MyColumn 本來是 int 型態,而我們想要顯示的「通過」是 VARCHAR ,兩個資料型態不同所以拋出上面的錯誤。我們可以使用 CAST 將 MyColumn 的內容轉換為 VARCHAR ,讓這個欄位的資料型態一致即可:
    

select (case
            when MyColumn = 1 then '通過'
            else CAST(MyColumn AS VARCHAR(10))
    end
           ) as alias
from MyTable;

    



參考資料:
Microsoft.Learn - CAST and CONVERT (Transact-SQL)

留言

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com