在 SQL Server 中可以使用 CAST 函式將資料型態做轉換。
下面的範例是產生 A 和 B 兩個欄位,兩個都是數字 0 ,但是 B 欄位會將 0 轉換為字串的格式:
查詢結果如下:
(在有些編輯器中可以看到差異,數字會靠右,字串會靠左)
平時在使用 IIF 或是 CASE WHEN 時可能會遇到以下情境,想要將 MyTable 的 MyColumn 欄位依據內容轉換,例如 MyColumn 的值是 1 就顯示「通過」,其他就顯示原本的內容:
但是會出現以下錯誤:
原因是因為 MyColumn 本來是 int 型態,而我們想要顯示的「通過」是 VARCHAR ,兩個資料型態不同所以拋出上面的錯誤。我們可以使用 CAST 將 MyColumn 的內容轉換為 VARCHAR ,讓這個欄位的資料型態一致即可:
參考資料:
Microsoft.Learn - CAST and CONVERT (Transact-SQL)
下面的範例是產生 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)
感謝教學~
回覆刪除