SQL 中數據類型的轉換 ---轉


轉自: 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 的轉換都將被截斷。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM