SQL Server转型

cast(字段 as int) 或者 convert(int,字段)


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

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 脚本,但是这里面也孕育着潜在的风险,可能会出现在脚本一开始运行的时候都是正常的,但却某一个时间点之后,程序莫名出现错误,慎用!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值