在 Select 语句中使用 Convert 和 Cast 有啥区别[重复]

Posted

技术标签:

【中文标题】在 Select 语句中使用 Convert 和 Cast 有啥区别[重复]【英文标题】:Whats is the difference between using Convert and Cast in a Select statement [duplicate]在 Select 语句中使用 Convert 和 Cast 有什么区别[重复] 【发布时间】:2013-12-10 12:35:55 【问题描述】:

我在这里提出了一个问题

Select the field as Distinct having data type as Text. Sql Server

我收到了两个回复,其中一个说要使用

SELECT DISTINCT CONVERT(VARCHAR(MAX), Subjects) FROM T1

另一个说要使用

select distinct cast(Subjects as varchar) from T1

我都试过了,它们都工作正常。我想知道两者之间有什么区别。

谢谢。

【问题讨论】:

第二个转换为varchar(30) 而不是max,但这只是因为没有指定长度。不是因为CAST vs CONVERT 它们只是“工作正常”,因为您没有在任何大于 30 个字符的字符串上比较它们。你看到my comment on the answer you accepted了吗? 【参考方案1】:

不,性能不是问题。(就您的问题所描述的两者都可以使用并且它们之间没有区别,但正如martin 所说,使用CAST 的语句将按原样转换为 varchar(30)这是默认长度)

CAST is an ANSI SQL-92

CONVERT is specific to SQL Server

CONVERT 特定于 SQL Server,在日期和时间值、小数和货币符号之间进行转换时具有更大的灵活性。

试试这个

SELECT DISTINCT CONVERT(VARCHAR(MAX), GETDATE(),108)
--and the other is saying to use

select distinct cast(GETDATE() as VARCHAR(MAX))

【讨论】:

你能举个例子,CAST 保留 CONVERT 没有的小数位吗?【参考方案2】:

性能方面,没有区别。 只是 CAST 是 ANSI-SQL(符合标准),因此查询可以在服务器技术之间移植。

Convert 特定于 sql server,但提供了更丰富的转换选项。

建议使用 cast 以实现可移植性,除非您必须这样做。

国王的问候, 苏米特

【讨论】:

【参考方案3】:

在日期和时间值、小数和货币符号之间进行转换时,CONVERT 更加灵活。 CAST 更符合 ANSI 标准。

这意味着当转换格式设置为标准时,您可以在转换中使用很多格式 例如

convert ( datetime , get date () , **format**)

格式中可以输入格式的编号。

101 毫米/日/年

102 yyyy.mm.dd ANSI 日期与世纪

103 日/月/年

104 dd.mm.yyyy

你可以用谷歌搜索更多格式。

在性能方面或任何其他方面都没有差异

【讨论】:

以上是关于在 Select 语句中使用 Convert 和 Cast 有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

sql查询结果保留两位小数,如何做?

sql语句中的convert是啥意思

求数据库中离当前时间30天的序列 SQl语句

SQL 查询增加语句

如何在SqlServer数据库中用SQL语句中比较时间

sql语句查询月份的数据