轉自: http://blog.163.com/liufupanhao@126/blog/static/128465170201111210446407/
感謝博主的分享!
1、資料類型轉換: (1)兩種轉換場合:
A:當兩個結果集之間的資料進行比較或聯和(union)的時候,如果兩個結果集的資料類型不同時必須進行轉換。 B:將Transact-SQL 得結果集返回給程式中的變數時,須將結果集的類型從SQL Server資料類型轉換為變數的資料類型。 (2)兩種轉換方式:
A:自動進行的隱性轉換(對於使用者是不可見的)。 如:一個 smallint 變數和 int 變數比較時,將smallint 變數在比較前被隱性轉換成 int 變數。 B:使用者提供的顯式轉換(使用 CAST 或 CONVERT 函數進行顯式轉換)。 2、函數文法 文法
CAST ( expression AS data_type [ (length ) ])
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
參數
expression 任何有效運算式。
data_type 作為目標的系統提供資料類型。
length 目標資料類型的長度(目標資料類型為nchar、nvarchar、char、varchar、binary 或 varbinary 時有效)。CONVERT預設為 30 個字元。
style 目標資料格式的樣式,如果 style 為 NULL,則返回的結果也為 NULL。
注意
A:目標資料類型不能使用別名資料類型。 nchar、nvarchar、char、varchar、binary 或 varbinary
B:目標資料格式的樣式在下列類型間轉換時才有效
(1)datetime 或 smalldatetime 資料轉換成字元資料(nchar、nvarchar、char、varchar、nchar 或 nvarchar 資料類型)
(2)已知日期或時間格式的字元資料轉換成 datetime 或 smalldatetime 資料,或是字串格式
(3)用於將 float、real、money 或 smallmoney 資料轉換成字元資料(nchar、nvarchar、char、varchar、nchar 或 nvarchar 資料類型)。
3、備忘(來著MSDN) (1)大值資料類型 大值資料類型表現出與小值資料類型相同的隱式和顯式轉換行為,特別是 varchar、nvarchar 和 varbinary 資料類型。但是,應該考慮以下原則:
從 image 到 varbinary(max) 的轉換與反向轉換是隱式轉換,text 與 varchar(max)、ntext、nvarchar(max) 之間的轉換也是隱式轉換。 從大值資料類型(如 varchar(max))到小值資料類型(如 varchar)的轉換是隱式轉換,但如果大值相對於指定長度的小值資料類型顯得太大,則產生截斷。 從 varchar、nvarchar 或 varbinary 到其相應的大值資料類型的轉換都是隱式執行的。 從 sql_variant 資料類型到大值資料類型的轉換是顯式轉換。 大值資料類型不能轉換為 sql_variant 資料類型。 (2)xml 資料類型 當您將 xml 資料類型顯式或隱式轉換為字串或位元據類型時,xml 資料類型的內容將根據一組規則進行序列化。
(3)文本和映像資料類型
不支援對 text 和 image 資料類型進行自動資料類型轉換。可將 text 資料顯式轉換為字元資料,將 image 資料轉換為 binary 或 varbinary,但最大長度是 8000 位元組。如果試圖進行不正確的轉換,如將包含字母的字元運算式轉換為 int,則 SQL Server 將返回錯誤訊息。
(4)輸出的定序 如果 CAST 或 CONVERT 的輸出是字串,並且輸入也是字串,則輸出將與輸入具有相同的定序和定序標籤。如果輸入不是字串,則輸出採用資料庫的預設定序以及強制預設的定序標籤。請參閱定序優先順序 (Transact-SQL)。
若要為輸出分配不同的定序,請將 COLLATE 子句應用於 CAST 或 CONVERT 函數的結果運算式。例如:
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
(5)截斷結果和舍入結果 將字元或二進位運算式(char、nchar、nvarchar、varchar、binary 或 varbinary)轉換為其他資料類型的運算式時,可截斷資料,僅顯示部分資料,或返回錯誤(因為結果太短而無法顯示)。除了下表顯示的轉換,其他到 char、varchar、nchar、nvarchar、binary 和 varbinary 的轉換都將被截斷。