文章目錄
資料類型轉換
在 Transact-SQL 中,可能有兩個層級的資料類型轉換:
- 當一個對象的資料移動到另一個對象,或兩個對象之間的資料進行比較或組合時,資料可能不得不從一個對象的資料類型轉換為另一個對象的資料類型。
- 當將來自 Transact-SQL 結果列、傳回碼或輸出參數的資料移動到程式變數中時,必須將這些資料從 Microsoft SQL Server 資料類型轉換成該變數的資料類型。
資料類型轉換有兩種:
- 隱性轉換對於使用者是不可見的。 SQL Server 自動將資料從一種資料類型轉換成另一種資料類型。例如,如果一個
smallint 變數和一個 int 變數相比較,這個 smallint 變數在比較前即被隱性轉換成
int 變數。
- 顯式轉換使用 CAST 或 CONVERT 函數。
CAST 和 CONVERT 函數將數值從一個資料類型(局部變數、列或其它運算式)轉換到另一個資料類型。例如,下面的 CAST 函數將數值 $157.27 轉換成字串 '$157.27':
CAST ( $157.27 AS VARCHAR(10) )
CAST 函數基於 SQL-92 標準並且優先於 CONVERT。
轉換小數位元不同的資料類型時,結果值有時被截斷,有時被舍入。
| 被轉換的資料類型 |
轉換為的資料類型 |
行為 |
numeric |
numeric |
Round |
numeric |
int |
截斷 |
numeric |
money |
Round |
money |
int |
Round |
money |
numeric |
Round |
float |
int |
截斷 |
float |
numeric |
Round |
float |
datetime |
Round |
datetime |
int |
舍入 |
例如,以下轉換的結果為 10:
SELECT CAST(10.6496 AS int)
在進行資料類型轉換時,若目標資料類型的小數位元小於來源資料類型的小數位元,則該值將被截斷。例如,以下轉換的結果為 $10.3497:
SELECT CAST(10.3496847 AS money)
當非數字型 char、nchar、varchar 或 nvarchar 資料轉換為 int、float、numeric 或 decimal 時,SQL Server 將返回錯誤訊息。當Null 字元串 (" ") 轉換為 numeric 或 decimal 時,SQL Server 也返回錯誤。
當從一個 SQL Server 物件的資料類型向另一個轉換時,一些隱性和顯式資料類型轉換是不支援的。例如,nchar 數值根本就不能被轉換成
image 數值。nchar 只能顯式地轉換成 binary,隱性地轉換到
binary 是不支援的。nchar 可以顯式地或者隱性地轉換成 nvarchar。
當處理 sql_variant 資料類型時,SQL Server 支援將具有其它資料類型的對象隱性轉換成
sql_variant 類型。然而,SQL Server 並不支援從 sql_variant 資料隱性地轉換到其它資料類型的對象。
在應用程式變數和 SQL Server 結果集列、傳回碼、參數或參數標記之間轉換時,所支援的資料類型轉換是由資料庫應用程式介面定義。