加入收藏 | 设为首页 | 会员中心 | 我要投稿 鹰潭站长网 (https://www.0701zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL SERVER的cast和convert

发布时间:2022-11-16 17:00:32 所属栏目:MsSql教程 来源:转载
导读: 操作中对数据进行类型转换 cast 和 convert
相同点:都可以进行数据类型转换
不同点,语法不同
cast
cast(expresion as data_type)
convert
convert(data_type[(length)], expression[,sty

操作中对数据进行类型转换 cast 和 convert

相同点:都可以进行数据类型转换

不同点,语法不同

cast

cast(expresion as data_type)

convert

convert(data_type[(length)], expression[,style])

(1)expression:是任何有效的表达式。

(2)data_type:目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。

(3)length:nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。

(4)style:日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

select CAST('123' as int)   -- 123
select CONVERT(int, '123')  -- 123
select CAST(123.4 as int)   -- 123
select CONVERT(int, 123.4)  -- 123 
select CAST('123.4' as int)
select CONVERT(int, '123.4')
select CAST('123.4' as decimal)  -- 123
select CONVERT(decimal, '123.4') -- 123 
select CAST('123.4' as decimal(9,2))  -- 123.40
select CONVERT(decimal(9,2), '123.4') -- 123.40
declare @Num money
set @Num = 1234.56
select CONVERT(varchar(20), @Num, 0)  -- 1234.56
select CONVERT(varchar(20), @Num, 1)  -- 1,234.56
select CONVERT(varchar(20), @Num, 2)  -- 1234.5600

CAST和CONVERT用在时间转换上的区别

cast 和 convert 都是用来转化数据类型的,功能上是差不多的。

在时间转化中一般用到 convert,因为它比 cast 多加了一个 style,可以转化成不同时间的。打个简单的例子吧,比方说查找一下当前的时间,select getdate(),而我们只需要到年月日而已,这时我们就可以把它转化为 select convert(varchar(100),GETDATE(),111) 转化成我们需要的Mssq类型转换函数,而 select CAST(GETDATE() as varchar(30)) cast 就没办法或者是转化过程比较繁琐。

在这里插入图片描述

1-1.SELECT CONVERT(decimal(5,2), ‘123.477’) ==>123.48

1-2.SELECT CONVERT(decimal, ‘123.477’) ==>123

提问:SELECT CONVERT(int, ‘123.477’) 和 SELECT CAST(‘123.477’ AS int) 的写法对不?

回答:不对,会报错。因为CAST()函数和CONVERT()函数都不能执行四舍五入或截断操作,所以要把int换成decimal,就像1-2 和 2-2 一样。

SELECT CAST(123.477 AS int) 不报错

SELECT CAST(‘123’ AS int) 不报错

(编辑:鹰潭站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!