SQL 数据类型转换 总结

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)大值数据类型

大值数据类型表现出与小值数据类型相同的隐式和显式转换行为,特别是 varcharnvarcharvarbinary 数据类型。但是,应该考虑以下原则:

  • imagevarbinary(max) 的转换与反向转换是隐式转换,textvarchar(max)ntextnvarchar(max) 之间的转换也是隐式转换。
  • 从大值数据类型(如 varchar(max))到小值数据类型(如 varchar)的转换是隐式转换,但如果大值相对于指定长度的小值数据类型显得太大,则产生截断。
  • varcharnvarcharvarbinary 到其相应的大值数据类型的转换都是隐式执行的。
  • sql_variant 数据类型到大值数据类型的转换是显式转换。
  • 大值数据类型不能转换为 sql_variant 数据类型。
  • (2)xml 数据类型

    当您将 xml 数据类型显式或隐式转换为字符串或二进制数据类型时,xml 数据类型的内容将根据一组规则进行序列化。

    (3)文本和图像数据类型

    不支持对 textimage 数据类型进行自动数据类型转换。可将 text 数据显式转换为字符数据,将 image 数据转换为 binaryvarbinary,但最大长度是 8000 字节。如果试图进行不正确的转换,如将包含字母的字符表达式转换为 int,则 SQL Server 将返回错误消息。

    (4)输出的排序规则

    如果 CAST 或 CONVERT 的输出是字符串,并且输入也是字符串,则输出将与输入具有相同的排序规则和排序规则标签。如果输入不是字符串,则输出采用数据库的默认排序规则以及强制默认的排序规则标签。请参阅排序规则优先级 (Transact-SQL)

    若要为输出分配不同的排序规则,请将 COLLATE 子句应用于 CAST 或 CONVERT 函数的结果表达式。例如:

    SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

    (5)截断结果和舍入结果

    将字符或二进制表达式(charncharnvarcharvarcharbinaryvarbinary)转换为其他数据类型的表达式时,可截断数据,仅显示部分数据,或返回错误(因为结果太短而无法显示)。除了下表显示的转换,其他到 charvarcharncharnvarcharbinaryvarbinary 的转换都将被截断。

你可能感兴趣的:(数据类型)