T-SQL转换与转换


325

什么时候应该使用CASTvs 的一般指导是什么CONVERT?选择一个与另一个相对是否存在任何性能问题?离ANSI-SQL更近吗?

Answers:


339

CONVERT是SQL Server特定的,CAST是ANSI。

CONVERT可以更灵活地设置日期等格式。除此之外,它们几乎相同。如果您不关心扩展功能,请使用CAST

编辑:

如下面的评论中@beruic和@CF所述,使用隐式转换(即不使用CAST或CONVERT的转换)时,可能会导致精度损失。有关更多信息,请参见CAST和CONVERT,尤其是以下图形:SQL Server数据类型转换表。有了这些额外的信息,原始建议仍然保持不变。尽可能使用CAST。


5
此外,我相信在某些数值转换中应使用CAST来保持精度,但是我很难找到该信息的可靠来源。
2013年

2
@beruic没错,MSDN中有信息:msdn.microsoft.com/zh-cn/library/ms187928.aspx在DECIMAL和NUMERIC类型之间进行转换时,必须使用CAST才能保持精度。
CF

@CF您在哪里看到此信息?我遵循了该链接,该链接打开了CAST和CONVERT的常规页面,并且我能找到的唯一有关精度的信息是有关使用科学计数法转换浮点值的信息。我的最初评论可能不对吗?
2014年

6
@beruic这是关于这幅画在文章底部i.msdn.microsoft.com/dynimg/IC170617.gif现在,我想,也许精度损失可以隐式转换发生,在使用任一CAST或转换不会发生。还不太清楚...
CF

2
@CF我同意它不是很清楚,并且肯定应该有关于它的更具体的文档,因此希望微软做到这一点。但在那里很好发现:)
比利时


12

CAST是标准SQL,但CONVERT仅用于方言T-SQL。对于日期时间,我们在转换方面有一个小优势。

使用CAST,您可以指定表达式和目标类型;使用CONVERT,第三个参数表示转换的样式,某些转换支持该参数,例如字符串与日期和时间值之间的转换。例如,CONVERT(DATE,'1/2/2012',101)使用表示美国标准的样式101将文字字符串转换为DATE。



6

似乎没有人注意到的是可读性。有…

CONVERT(SomeType,
    SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    )

……可能比……更容易理解

CAST(SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    AS SomeType
    )

2
但是,我认为CAST通常更具可读性。CAST(Column1 AS int)阅读CONVERT(int, Column1)甚至比长表达更合乎逻辑
S.Serpooshan

4

CAST使用ANSI标准。在可移植性的情况下,这将在其他平台上起作用。CONVERT特定于sql server。但是功能很强大。您可以为日期指定不同的样式

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.