SQL中CAST和CONVERT的区别是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中CAST和CONVERT的区别是啥?相关的知识,希望对你有一定的参考价值。

如果SQL
Server程序员想将表达式从一种换为另一种,他可以从SQL
Server
7和2000中自带的两种功能中做出选择。在存储过程或其他情况下,我们常常需要将数据从datetime型转化成varchar型;CONVERT和CAST就可以用于这种情况。
由于SQL
Server提供两种功能,因此应该选择哪种功能或应该在哪种情况下使用该功能就很容易让人困惑了。CONVERT是专对SQL
Server使用的,使日期与时间值,小数之间转换具有更宽的灵活性。
CAST是两种功能中更具ANSI标准的功能,即虽然更具便携性(比如,使用CAST的函数能更容易的被其它数据库软件使用),但功能相对弱一些。不过,当小数转化为数值,并保留原始表达式中的小数数值时,仍然需要使用CAST。因此,我建议首先使用CAST,如果遇到必须使用CONVERT的情况时再使用CONVERT。
CAST和CONVERT还能联合使用,达到特殊的效果。比如,在current
date下生成char变量一般使用以下方法:
SELECT
CONVERT(CHAR(10),
CURRENT_TIMESTAMP,
102)
(102表明使用了ANSI日期模式,即yy.mm.dd型)
然而,如果你希望将这个变量明确生成为datetime或smalldatetime变量,以此在特定的数据库栏中兼容,那么你可以使用以下语句:
SELECT
CAST(CONVERT(CHAR(10),CURRENT_TIMESTAMP,102)
AS
DATETIME
返回值将是
yy.mm.dd
00:00:00(如12:00AM作为时间戳
参考技术A 将某种数据类型的表达式显式转换为另一种数据类型。CAST

CONVERT
提供相似的功能。

语法
使用
CAST:

CAST
(
expression
AS
data_type
)

使用
CONVERT:

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

参数
expression

是任何有效的
Microsoft
SQL
Server"
表达式。有关更多信息,请参见表达式。
data_type

目标系统所提供的数据类型,包括
bigint

sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。

length

nchar、nvarchar、char、varchar、binary

varbinary
数据类型的可选参数。

style


期格式样式,借以将
datetime

smalldatetime
数据转换为字符数据(nchar、nvarchar、char、varchar、nchar

nvarchar
数据类型);或者字符串格式样式,借以将
float、real、money

smallmoney
数据转换为字符数据(nchar、nvarchar、char、varchar、nchar

nvarchar
数据类型)。


某种数据类型的表达式显式转换为另一种数据类型。有关可用的数据类型的更多信息,请参见数据类型。日期格式样式,借以将
datetime

smalldatetime
数据转换为字符数据(nchar、nvarchar、char、varchar、nchar

nvarchar
数据类型);或者字符串格式样式,借以将
float、real、money

smallmoney
数据转换为字符数据(nchar、nvarchar、char、varchar、nchar

nvarchar
数据类型)。当转换为字符数据时输出。

隐性转换对于用户是不可见的。
SQL
Server
自动将数据从一种数据类型转换成另一种数据类型。例如,如果一个
smallint
变量和一个
int
变量相比较,这个
smallint
变量在比较前即被隐性转换成
int
变量。

显式转换使用
CAST

CONVERT
函数。
CAST

CONVERT
函数将数值从一个数据类型(局部变量、列或其它表达式)转换到另一个数据类型。例如,下面的
CAST
函数将数值
$157.27
转换成字符串
''$157.27'':CAST
(
$157.27
AS
VARCHAR(10)
)
CAST
函数基于
SQL-92
标准并且优先于
CONVERT。

从一个
SQL
Server
对象的数据类型向另一个转换时,一些隐性和显式数据类型转换是不支持的。例如,nchar
数值根本就不能被转换成
image
数值。nchar
只能显式地转换成
binary,隐性地转换到
binary
是不支持的。nchar
可以显式地或者隐性地转换成
nvarchar。

当处理
sql_variant
数据类型时,SQL
Server
支持将具有其它数据类型的对象隐性转换成
sql_variant
类型。然而,SQL
Server
并不支持从
sql_variant
数据隐性地转换到其它数据类型的对象

SQL中CAST和CONVERT用在时间转换上的区别(我新手,越详细越好)

还有他们是不是用在时间的转换上比较多!不要到网上复制粘贴(谢谢合作)BS不劳而获的,没有满意答案,会关闭问题有满意答案会追加200分给你

参考技术A cast 和convert都是用来转化数据类型的,功能上是差不多的。
表达式:CAST ( expression AS data_type ) ,
CONVERT (data_type[(length)], expression [, style]),
在时间转化中一般用到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本回答被提问者采纳
参考技术B CONVERT 与 CAST 都可以 用来做 字符 与 日期 类型之间的转换。
但是一般来说, 用 CONVERT 比较好, 因为有一个 用于格式化的参数。

你执行一下下面这个 SQL, 就能看出区别出来。

SELECT 0 AS ID , Convert(VARCHAR(30), GETDATE(), 0 ) AS result UNION ALL
SELECT 100 AS ID , Convert(VARCHAR(30), GETDATE(), 100) AS result UNION ALL
SELECT 1 AS ID , Convert(VARCHAR(30), GETDATE(), 1 ) AS result UNION ALL
SELECT 101 AS ID , Convert(VARCHAR(30), GETDATE(), 101) AS result UNION ALL
SELECT 2 AS ID , Convert(VARCHAR(30), GETDATE(), 2 ) AS result UNION ALL
SELECT 102 AS ID , Convert(VARCHAR(30), GETDATE(), 102) AS result UNION ALL
SELECT 2 AS ID , Convert(VARCHAR(30), GETDATE(), 2 ) AS result UNION ALL
SELECT 102 AS ID , Convert(VARCHAR(30), GETDATE(), 102) AS result UNION ALL
SELECT 3 AS ID , Convert(VARCHAR(30), GETDATE(), 3 ) AS result UNION ALL
SELECT 103 AS ID , Convert(VARCHAR(30), GETDATE(), 103) AS result UNION ALL
SELECT 4 AS ID , Convert(VARCHAR(30), GETDATE(), 4 ) AS result UNION ALL
SELECT 104 AS ID , Convert(VARCHAR(30), GETDATE(), 104) AS result UNION ALL
SELECT 5 AS ID , Convert(VARCHAR(30), GETDATE(), 5 ) AS result UNION ALL
SELECT 105 AS ID , Convert(VARCHAR(30), GETDATE(), 105) AS result UNION ALL
SELECT 6 AS ID , Convert(VARCHAR(30), GETDATE(), 6 ) AS result UNION ALL
SELECT 106 AS ID , Convert(VARCHAR(30), GETDATE(), 106) AS result UNION ALL
SELECT 7 AS ID , Convert(VARCHAR(30), GETDATE(), 7 ) AS result UNION ALL
SELECT 107 AS ID , Convert(VARCHAR(30), GETDATE(), 107) AS result UNION ALL
SELECT 8 AS ID , Convert(VARCHAR(30), GETDATE(), 8 ) AS result UNION ALL
SELECT 108 AS ID , Convert(VARCHAR(30), GETDATE(), 108) AS result UNION ALL
SELECT 9 AS ID , Convert(VARCHAR(30), GETDATE(), 9 ) AS result UNION ALL
SELECT 109 AS ID , Convert(VARCHAR(30), GETDATE(), 109) AS result UNION ALL
SELECT 10 AS ID , Convert(VARCHAR(30), GETDATE(), 10 ) AS result UNION ALL
SELECT 110 AS ID , Convert(VARCHAR(30), GETDATE(), 110) AS result UNION ALL
SELECT 11 AS ID , Convert(VARCHAR(30), GETDATE(), 11 ) AS result UNION ALL
SELECT 111 AS ID , Convert(VARCHAR(30), GETDATE(), 111) AS result UNION ALL
SELECT 12 AS ID , Convert(VARCHAR(30), GETDATE(), 12 ) AS result UNION ALL
SELECT 112 AS ID , Convert(VARCHAR(30), GETDATE(), 112) AS result UNION ALL
SELECT 13 AS ID , Convert(VARCHAR(30), GETDATE(), 13 ) AS result UNION ALL
SELECT 113 AS ID , Convert(VARCHAR(30), GETDATE(), 113) AS result UNION ALL
SELECT 14 AS ID , Convert(VARCHAR(30), GETDATE(), 14 ) AS result UNION ALL
SELECT 114 AS ID , Convert(VARCHAR(30), GETDATE(), 114) AS result UNION ALL
SELECT 20 AS ID , Convert(VARCHAR(30), GETDATE(), 20 ) AS result UNION ALL
SELECT 120 AS ID , Convert(VARCHAR(30), GETDATE(), 120) AS result UNION ALL
SELECT 21 AS ID , Convert(VARCHAR(30), GETDATE(), 21 ) AS result UNION ALL
SELECT 121 AS ID , Convert(VARCHAR(30), GETDATE(), 121) AS result
参考技术C
参考技术D

以上是关于SQL中CAST和CONVERT的区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

sql语句中的convert是啥意思

在SQL中,convent与cost的区别是啥?指的是用法和功能。。。 谢谢了 !!

SQL SERVER中强制类型转换cast和convert的区别

SQL SERVER中强制类型转换cast和convert的区别

SQL CAST与CONVERT区别

SQL SERVER中强制类型转换cast和convert的区别