SQL中的cast和convert的用法和区别以及时间转换

  在 mysql 操作中我们经常需要对数据进行类型转换,此时我们应该使用的是cast()或convert()。两者的对比:

  相同点:都是进行数据类型转换,实现的功能基本等同。

  不同点:两者的语法不同,cast(value as type) 、 convert(value,type)

一、语法

1、使用 CAST:CAST ( expression AS data_type )
2、使用 CONVERT:CONVERT (data_type[(length)], expression [, style])

3、参数说明:

(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 数据类型)。

二、cast和convert的代码示例

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')
-- Conversion failed when converting the varchar value '123.4' to data type int.

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

三、SQL中CAST和CONVERT用在时间转换上的区别

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

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

  convert 时间后面的 style 值不同产生的时间格式也不一样,具体可参看网站http://www.w3school.com.cn/sql/func_convert.asp

原文地址:https://www.cnblogs.com/goloving/p/15223539.html