首页 > 数据库 > SQL Server >

sqlserver中的数据类型隐式转换

2016-11-21

sqlserver中的数据类型隐式转换:1)显示转换顾名思义使用函数进行数据类型转化,如cast、convert。cast 和convert的区别:CAST( expression AS data_type );CONVERT(data_type[(length)], expression [, style])。

数据类型转换分为隐式转换和显示转换

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 &ndash;返回值为10.2

SELECT

CASE

WHEN 1 > 1 THEN 10

WHEN 1 = 1 THEN &lsquo;abc&rsquo;

WHEN 1 < 1 THEN 10.2

END &ndash; 语法错误

这是因为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]

在第一个例子中,&rsquo;1&rsquo;被转换为int的1

在第二个例子中,不管那个后面的条件成立,结果都被转换为decimal

第三个例子由于&lsquo;ab&rsquo;转换为decimal失败,所以报错

在加一个图吧

这里写图片描述

隐性转换有的时候非常方便,可以简化SQL 脚本,但是这里面也孕育着潜在的风险,可能会出现在脚本一开始运行的时候都是正常的,但却某一个时间点之后,程序莫名出现错误,慎用!!!

相关文章
最新文章
热点推荐