T-SQL Cast与转换

时间:2009-04-01 21:05:48

标签: sql sql-server database tsql

关于何时使用CASTCONVERT的一般指导是什么?是否存在与选择其中一个相关的性能问题?是否更接近ANSI-SQL?

7 个答案:

答案 0 :(得分:323)

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

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

编辑:

正如@beruic和@ C-F在下面的评论中所指出的,使用隐式转换时可能会失去精确度(即既不使用CAST也不使用CONVERT的转换)。有关详细信息,请参阅CAST and CONVERT,尤其是此图:SQL Server Data Type Conversion Chart。有了这些额外信息,原始建议仍然保持不变。尽可能使用CAST。

答案 1 :(得分:27)

Convert具有日期到字符串转换的样式参数。

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

答案 2 :(得分:9)

CAST是标准SQL,但CONVERT不是(仅适用于方言T-SQL),在日期时间转换时我们有一个很小的优势

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

的问候,

答案 3 :(得分:5)

要展开the above answer copied by Shakti ,我实际上已经能够衡量两个功能之间的性能差异。

我正在测试解决方案变体的性能this question,并发现使用CAST时标准偏差和最大运行时间更长。

Runtimes in milliseconds *以毫秒为单位的时间,根据precision of the DateTime type

四舍五入到最接近的1/300秒

答案 4 :(得分:3)

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

答案 5 :(得分:3)

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

CONVERT(SomeType,
    SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    )

...可能比......更容易理解。

CAST(SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    AS SomeType
    )

答案 6 :(得分:1)

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