T-SQL Cast与转换

Bud*_*Joe 314 sql t-sql database sql-server

什么时候应该使用CASTvs. 一般指导CONVERT?是否存在与选择其中一个相关的性能问题?是否更接近ANSI-SQL?

Mat*_*ell 329

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

CONVERT更灵活的是你可以格式化日期等.除此之外,它们几乎是一样的.如果您不关心扩展功能,请使用CAST.

编辑:

正如@beruic和@CF在下面的注释中所指出的,当使用隐式转换时(可能既不使用CAST也不使用CONVERT),可能会丢失精度.有关详细信息,请参阅CAST和CONVERT,尤其是此图:SQL Server数据类型转换图表.有了这些额外信息,原始建议仍然保持不变.尽可能使用CAST.

  • @beruic这是关于这张图片底部的文章http://i.msdn.microsoft.com/dynimg/IC170617.gif现在我认为可能在隐式转换中可能发生精度损失,并且在CAST中都不会发生或使用CONVERT.现在还不太清楚...... (6认同)
  • 此外,我相信有一些数字转换应该使用CAST来保持精度,但我很难找到这个信息的可靠来源. (5认同)
  • @beruic你是对的,MSDN中有信息:http://msdn.microsoft.com/en-us/library/ms187928.aspx在DECIMAL和NUMERIC类型之间进行转换时,需要CAST来保持精度. (2认同)
  • @CF我同意它不是很清楚,应该有更多关于它的具体文档,所以让我们希望微软这样做.但很好地发现那里:) (2认同)

jas*_*ldo 27

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

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


小智 10

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

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

问候,


Ela*_*tor 7

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

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

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


小智 5

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


Ata*_*rio 5

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

CONVERT(SomeType,
    SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    )
Run Code Online (Sandbox Code Playgroud)

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

CAST(SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    AS SomeType
    )
Run Code Online (Sandbox Code Playgroud)

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