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

#1 楼

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

CONVERT更为灵活,因为您可以格式化日期等。除此之外,它们几乎相同。如果您不关心扩展功能,请使用CAST。如下面的评论中@beruic和@CF所指出的那样,可能会丢失使用隐式转换时的精度(即不使用CAST或CONVERT的转换)。有关更多信息,请参见CAST和CONVERT,尤其是以下图形:SQL Server数据类型转换表。有了这些额外的信息,原始建议仍然保持不变。尽可能使用CAST。

评论


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

–beruic
13年5月23日在12:14

@beruic是的,MSDN中有信息:msdn.microsoft.com/zh-cn/library/ms187928.aspx在DECIMAL和NUMERIC类型之间进行转换时,需要CAST来保持精度。

– C-F
2014年3月19日在2:05



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

–beruic
2014年3月19日在13:22

@beruic这与文章底部的这张图片有关。现在,我认为精度损失可能会在隐式转换中发生,并且在使用CAST或CONVERT时不会发生。不太清楚...

– C-F
2014年3月20日在21:06

@ C-F我同意这不是很清楚,并且绝对应该有关于它的更具体的文档,因此希望微软做到这一点。但是很好发现:)

–beruic
2014年3月21日在9:12

#2 楼

Convert具有用于将日期转换为字符串的样式参数。

http://msdn.microsoft.com/zh-cn/library/ms187928.aspx

#3 楼

CAST是标准SQL,但CONVERT仅用于方言T-SQL。在日期时间的情况下,进行转换的优势很小。

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

#4 楼

为了扩展以上Shakti复制的答案,我实际上已经能够测量两个函数之间的性能差异。使用CAST时,最大运行时间更长。


*时间(以毫秒为单位),根据DateTime类型的精度四舍五入到最接近的1/300秒。

#5 楼

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

CONVERT(SomeType,
    SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    )


...比……更容易理解。

CAST(SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    AS SomeType
    )


评论


但是,我认为CAST通常更具可读性。即使对于长表达式,CAST(Column1 AS int)也比CONVERT(int,Column1)更具逻辑可读性

– S.Serpooshan
18/12/30在6:25



#6 楼

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

#7 楼

您也不应使用CAST来获取哈希算法的文本。 CAST(HASHBYTES('...') AS VARCHAR(32))CONVERT(VARCHAR(32), HASHBYTES('...'), 2)不同。如果没有最后一个参数,结果将是相同的,但文本不是可读的。据我所知,您不能在CAST中指定最后一个参数。