T-SQL转换与转换

什么时候应该使用CASTCONVERT的一般指导是什么?选择其中一种与另一种是否存在性能问题?是否更接近于ANSI-SQL?

152180 次浏览

Convert有一个用于日期到字符串转换的样式参数。

http://msdn.microsoft.com/en-us/library/ms187928.aspx

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

CONVERT更灵活,因为你可以格式化日期等。除此之外,它们基本相同。如果你不关心扩展特性,请使用CAST

编辑:

正如下面@beruic和@C-F在评论中指出的那样,使用隐式转换(即既不使用CAST也不使用CONVERT)时,可能会损失精度。有关更多信息,请参见转换和转换,特别是这个图形:SQL Server数据类型转换图表。有了这些额外的信息,最初的建议仍然保持不变。尽可能使用CAST。

CAST是标准SQL,而CONVERT仅用于方言T-SQL。在datetime的情况下,我们有一个转换的小优势。

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

CAST采用ANSI标准。在可移植性的情况下,这将在其他平台上工作。CONVERT是sql server专用的。但是功能非常强。您可以为日期指定不同的样式

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

CONVERT(SomeType,
SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
)

可能比……更容易理解。

CAST(SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
AS SomeType
)

为了扩展以上答案被Shakti复制,我实际上已经能够测量两个函数之间的性能差异。

我正在测试这个问题解决方案的变化的性能,发现使用CAST时,标准偏差和最大运行时间更大。

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

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