共用方式為


資料類型轉換 (Database Engine)

下列情況中可以轉換資料類型:

  • 將一個物件的資料移到、比較或結合另一個物件的資料時,可能要將資料從一個物件的資料類型轉換成其他物件的資料類型。

  • 當 Transact-SQL 結果資料行、傳回碼或輸出參數的資料移至程式變數時,該資料必須從 SQL Server 系統資料類型,轉換成變數的資料類型。

在應用程式變數與 SQL Server 結果集資料行、傳回程式碼、參數或參數標記之間轉換時,所能使用的資料類型轉換是由資料庫 API 定義。

隱含及明確轉換

資料類型可以隱含或明確地轉換。

使用者看不到隱含轉換。 SQL Server 會自動將資料轉換成其他資料類型。 例如,如果將 smallint 與 int 做比較,就會先將 smallint 隱含地轉換成 int,然後再進行比較。

GETDATE() 會以隱含的方式轉換為日期樣式 0。 SYSDATETIME() 會以隱含的方式轉換為日期樣式 21。

明確轉換使用 CAST 或 CONVERT 函數。

CAST 與 CONVERT 函數會將數值 (本機變數、資料行或其他運算式) 轉換成另一個資料類型。 例如,下列 CAST 函數會將 $157.27 的數值轉換成 '157.27' 的字元字串:

CAST ( $157.27 AS VARCHAR(10) )

如果您希望 Transact-SQL 程式碼符合 ISO,請使用 CAST 來取代 CONVERT。 不使用 CAST 而使用 CONVERT,可以利用 CONVERT 的樣式功能。

下圖顯示 SQL Server 系統提供之資料類型所能使用的各種明確與隱含資料類型轉換。 其中包括 xml、bigint 和 sql_variant。 從 sql_variant 資料類型進行指派時,不可使用隱含轉換,但可以隱含轉換成 sql_variant。

資料類型轉換資料表

資料類型轉換行為

當您要將某 SQL Server 物件的資料類型轉換成其他資料類型時,有部分隱含與明確資料類型的轉換不予支援。 例如,nchar 值無法轉換成 image 值。 您只可使用明確轉換將 nchar 轉換成 binary;隱含轉換成 binary 不予支援。 但 nchar 可以明確或隱含轉換成 nvarchar。

下列主題說明其對應資料類型所表現的轉換行為:

binary 和 varbinary (Transact-SQL)

datetime2 (Transact-SQL)

money 和 smallmoney (Transact-SQL)

bit (Transact-SQL)

datetimeoffset (Transact-SQL)

smalldatetime (Transact-SQL)

char 和 varchar (Transact-SQL)

decimal 和 numeric (Transact-SQL)

sql_variant (Transact-SQL)

日期 (Transact-SQL)

float 和 real (Transact-SQL)

時間 (Transact-SQL)

datetime (Transact-SQL)

int、bigint、smallint 和 tinyint (Transact-SQL)

uniqueidentifier (Transact-SQL)

使用 OLE Automation 預存程序轉換資料類型

因為 SQL Server 使用 Transact-SQL 資料類型,而 OLE Automation 使用 Visual Basic 資料類型,所以 OLE Automation 預存程序必須轉換在兩者之間傳遞的資料。

下表說明從 SQL Server 到 Visual Basic 的資料類型轉換。

SQL Server 資料類型

Visual Basic 資料類型

char, varchar, text, nvarchar, ntext

String

decimal,numeric

String

bit

Boolean

binary, varbinary, image

一維 Byte() 陣列

int

Long

smallint

Integer

tinyint

Byte

float

Double

real

Single

money,smallmoney

Currency

datetime,smalldatetime

Date

設成 NULL 的任何類型

設成 Null 的 Variant

所有單一的 SQL Server 值皆會被轉換成單一的 Visual Basic 值,但不包括 binary、varbinary 及 image 值。 這些值會在 Visual Basic 中轉換成一維的 Byte() 陣列。 此陣列的範圍從 Byte(0 到 length1),其中 length 是 SQL Server binary 中的位元組數目、varbinary 或 image 值。

這些轉換是從 Visual Basic 資料類型到 SQL Server 資料類型。

Visual Basic 資料類型

SQL Server 資料類型

Long, Integer, Byte, Boolean, Object

int

Double,Single

float

Currency

money

Date

datetime

4000 或不到 4000 個字元的 String

varchar/nvarchar

大於 4000 個字元的 String

text/ntext

8000 或不到 8000 個位元組的一維 Byte() 陣列

varbinary

大於 8000 個位元組的一維 Byte() 陣列

image

請參閱

參考

OLE Automation 預存程序 (Transact-SQL)

CAST 和 CONVERT (Transact-SQL)

資料類型 (Transact-SQL)

COLLATE (Transact-SQL)