TRY_PARSE与TRY_CONVERT

时间:2018-04-16 23:21:03

标签: sql sql-server

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

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

选项包括TRY_PARSE函数与TRY_CONVERT函数。

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

任何人都可以澄清为什么TRY_PARSE在这个例子中不是一个有效的选择,因为我不想在将来犯这个错误

1 个答案:

答案 0 :(得分:0)

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