关于何时使用CAST
与CONVERT
的一般指导是什么?是否存在与选择其中一个相关的性能问题?是否更接近ANSI-SQL?
答案 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具有日期到字符串转换的样式参数。
答案 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
时标准偏差和最大运行时间更长。
*以毫秒为单位的时间,根据precision of the
DateTime
type
答案 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
中指定最后一个参数。