【问题标题】:TRY_PARSE vs TRY_CONVERTTRY_PARSE 与 TRY_CONVERT
【发布时间】:2018-04-16 23:21:03
【问题描述】:

我目前正在为我的 MCSA 数据平台学习,我把以下问题弄错了,我正在寻找解释为什么我的答案是错误的,因为测试中的解释没有多大意义。

您有一个名为 AuditTrail 的表,用于跟踪对其他表中数据的修改。 AuditTrail 表由许多进程更新。输入到 AuditTrail 的数据可能包含格式不正确的日期时间值。您实现了一个从各个列中检索数据的流程,但有时该流程在无法将数据转换为有效的日期时间值时会引发错误。 您需要使用 en-US 格式的区域性代码将数据转换为有效的日期时间值。如果转换失败,则必须在 en-US 格式文化代码中返回空值。如果转换失败,必须在列输出中返回空值,并且转换过程不能抛出错误。

选项是 TRY_PARSE 函数 vs TRY_CONVERT 函数。

我选择了TRY_PARSE,但正确答案是TRY_CONVERT

谁能澄清为什么TRY_PARSE 在这个例子中不是一个有效的选择,因为我不想在将来犯这个错误

【问题讨论】:

  • try_parse() 与文化论点似乎是合适的。我个人会选择try_convert(),因为我比较熟悉。
  • 是的,我选择它只是因为问题中指定了文化参数。不知道为什么它是一个不正确的选项。
  • 这个问题在最好的情况下似乎措辞非常糟糕,并且在最坏的情况下故意误导/完全不正确。 TRY_CONVERT() 甚至不允许您指定文化(仅一种样式),虽然它们可能对应(例如样式 101 和文化 en-us),但问题似乎是要求您指定文化代码...因此,如果有的话,TRY_PARSE() 是这里唯一有效的答案(即使两个选项都可以达到相同的结果)。
  • 感谢您的详细解释@ZLK。我希望他们在期末考试中不要有如此措辞不佳的问题。
  • 如果我给出了你给出的答案并且他们将其标记为不正确,我会抱怨它明确表示你必须这样做using the en-US format culture code。甚至在某些情况下 try_convert 会失败但 try_parse 会成功...例如,字符串 tuesday, 04/17/18 可以使用 try_parse(文化 en-us)正确解析,但使用 try_convert(任何样式 afaik)会返回 null。

标签: sql sql-server


【解决方案1】:

TRY_PARSETRY_CONVERT 之间的主要区别之一是TRY_PARSE 接受带有USING 子句的文化。尽管措辞不佳并且包含在假设中,但这个问题似乎暗示输入和系统文化是相同的。

因此在这种情况下,TRY_CONVERT 将是两个调用中更简单的一个,因为默认区域性假定为“en-US”。

如果您需要从字符串中解析法国日期,则必须选择 TRY_PARSE,因为它允许您指定文化。

TRY_PARSE ('mars 18 2018' AS DATETIME USING 'fr-FR')  

来源: https://docs.microsoft.com/en-us/sql/t-sql/functions/try-parse-transact-sql?view=sql-server-2017

【讨论】:

    【解决方案2】:
    1. TRY_PARSE 只能用于从字符串转换为日期/时间 或数字数据类型,其中 TRY_CONVERT 可用于任何 一般类型转换。例如,您可以使用 TRY_CONVERT 来 将字符串转换为 XML 数据类型,您也可以这样做 使用 TRY_PARSE

    2. 使用 TRY_CONVERT 将字符串转换为 XML 数据类型

      SELECT TRY_CONVERT(XML, '') AS [XML]

    上面的查询产生以下结果

    XML     <root></child></root>
    
    1. 使用 TRY_PARSE 将字符串转换为 XML 数据类型

      SELECT TRY_PARSE('' AS XML) AS [XML]

    The above query will result in the following error
      Invalid data type xml in function TRY_PARSE
    
    • 另一个区别是 TRY_PARSE 依赖于 .the .NET 与 TRY_CONVERT 一样的框架公共语言运行时 (CLR) 不是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 2013-04-28
      相关资源
      最近更新 更多