【问题标题】:T-SQL Cast versus ConvertT-SQL 强制转换与转换
【发布时间】:2010-10-16 23:30:16
【问题描述】:

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

【问题讨论】:

    标签: sql sql-server database tsql


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      编辑:

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

      【讨论】:

      • 另外,我相信有些数值转换应该使用 CAST 来保持精度,但我很难找到可靠的信息来源。
      • @beruic 没错,MSDN 中有信息:msdn.microsoft.com/en-us/library/ms187928.aspx 在 DECIMAL 和 NUMERIC 类型之间转换时需要 CAST 以保持精度。
      • @C-F 您在哪里看到这些信息?我点击了链接,该链接打开了关于 CAST 和 CONVERT 的一般页面,我能找到的关于精度的唯一信息是关于使用科学记数法转换浮点值的信息。我最初的评论可能有误吗?
      • @beruic 是关于文章底部的这张图片i.msdn.microsoft.com/dynimg/IC170617.gif 现在我认为可能会在隐式转换中发生精度损失,并且在使用 CAST 或 CONVERT 时不会发生。不太清楚……
      • @C-F 我同意这不是很清楚,肯定应该有更具体的文档,所以希望微软这样做。但在那里很好发现:)
      【解决方案3】:

      CAST 是标准 SQL,但 CONVERT 仅适用于方言 T-SQL。在日期时间的情况下,我们在转换方面有一点优势。

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          CONVERT(SomeType,
              SomeReallyLongExpression
              + ThatMayEvenSpan
              + MultipleLines
              )
          

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

          CAST(SomeReallyLongExpression
              + ThatMayEvenSpan
              + MultipleLines
              AS SomeType
              )
          

          【讨论】:

          • 但是,我认为 CAST 通常更具可读性。 CAST(Column1 AS int)CONVERT(int, Column1) 更符合逻辑,即使对于长表达式也是如此
          【解决方案6】:

          为了扩展the above answercopied by Shakti,我实际上已经能够衡量这两个函数之间的性能差异。

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

          *以毫秒为单位的时间,根据precision of the DateTime type四舍五入到最接近的1/300秒

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-05-07
              • 1970-01-01
              • 1970-01-01
              • 2021-08-24
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多