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 的转换都将被截断。

posted @ 2012-10-24 11:42  RY一步一个脚印  阅读(8674)  评论(0编辑  收藏  举报