sql server 中的数据类型隐式转换

数据类型转换分为隐式转换和显示转换
1)显示转换顾名思义使用函数进行数据类型转化,如cast、convert
cast 和convert的区别
CAST( expression AS data_type )
CONVERT(data_type[(length)], expression [, style])
大部分情况下两者执行同样的功能,不同的是CONVERT提供了一些日期格式的转换,而CAST没有这个功能
而CAST是ANSI兼容的,CONVERT不兼容,尤其在日期转换方面,CONVERT使用起来更加方便
详细使用参考[1]
2)隐式转换
先看几个例子

SELECT 1+ ‘1’ –返回值为2

SELECT
CASE
WHEN 1 > 1 THEN 10
WHEN 1 = 1 THEN ‘10’
WHEN 1 < 1 THEN 10.2
END –返回值为10.2

SELECT
CASE
WHEN 1 > 1 THEN 10
WHEN 1 = 1 THEN ‘abc’
WHEN 1 < 1 THEN 10.2
END – 语法错误

这是因为sql server中有多个数据类型在一个表达式中时会存在隐式的转换,各个数据类型的优先级如下
1、用户定义数据类型(最高)
2、sql_variant
3、xml
4、datetime
5、smalldatetime
6、float
7、real
8、decimal
9、money
10、smallmoney
11、bigint
12、int
13、smallint
14、tinyint
15、bit
16、ntext
17、text
18、image
19、timestamp
20、uniqueidentifier
21、nvarchar(包括 nvarchar(max))
22、nchar
23、varchar (包括 varchar(max))
24、char
25、varbinary(包括 varbinary(max))
26、binary(最低)
详细见参见[2]
在第一个例子中,’1’被转换为int的1
在第二个例子中,不管那个后面的条件成立,结果都被转换为decimal
第三个例子由于‘ab’转换为decimal失败,所以报错
在加一个图吧
sql server 中的数据类型隐式转换_第1张图片
隐性转换有的时候非常方便,可以简化SQL 脚本,但是这里面也孕育着潜在的风险,可能会出现在脚本一开始运行的时候都是正常的,但却某一个时间点之后,程序莫名出现错误,慎用!!!
参考:[1]http://www.studyofnet.com/news/279.html
[2]https://msdn.microsoft.com/zh-cn/library/ms190309(SQL.90).aspx

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