在 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 有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章