Cast类型转换字符过长可能被截断

来源:互联网 发布:sas程序员招聘 编辑:程序博客网 时间:2024/05/22 03:51

在使用Cast函数进行类型转换时,如果仅指定转换类型而没有指定长度,字符过长可能被截断。

例:

select cast(',1,2,3,4,8,9,10,11,12,13,14,15,16,17,18' as varchar)

结果:',1,2,3,4,8,9,10,11,12,13,14,15'

 

select cast(',1,2,3,4,8,9,10,11,12,13,14,15,16,17,18' as varchar(50))

结果:',1,2,3,4,8,9,10,11,12,13,14,15,16,17,18'

 

 

select SQL_VARIANT_PROPERTY(cast(',1,2,3,4,8,9,10,11,12,13,14,15,16,17,18' as varchar(50)),'MaxLength')

 

发现查询中默认该类型最大长度为30。

 

联机帮助相关说明:

 

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

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

截断结果和舍入结果

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

原创粉丝点击