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 脚本,但是这里面也孕育着潜在的风险,可能会出现在脚本一开始运行的时候都是正常的,但却某一个时间点之后,程序莫名出现错误,慎用!!!
参考:[1]http://www.studyofnet.com/news/279.html
[2]https://msdn.microsoft.com/zh-cn/library/ms190309(SQL.90).aspx

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值