MS考试中的TSQL Try_Parse与Try_Convert(区域性代码为n / a)

时间:2018-11-09 15:47:12

标签: sql-server tsql

我对761进行“测试”测试,看到一个问题,如果没有正确定义字段的值,那么我该怎么用,如果转换失败,我需要返回NULL,没有提到任何特定类型的数据,**没有关于该文化代码。只需要返回NULL,我就同时选择了TRY_PARSETRY_CONVERT。他们都做**if fails then returns NULL value**,所以我认为他们都是有效的答案,但这是单选题,本次测试的正确答案是TRY_PARSE。这背后是否有任何逻辑,或者它不是构造合理的问题。这是进行钻探测试的第三方供应商。 全部发送。 M

-------------------------------------------------- --Q78

declare @FakeDate varchar(100) = '38383838', @FakeInt VARCHAR(10) = 'xyz'
SELECT try_convert(DATE, @FakeDate),try_convert(INT, @FakeInt)
SELECT try_parse(@FakeDate AS date), TRY_PARSE(@FakeInt AS INT)

(No column name)    (No column name)
NULL    NULL
(No column name)    (No column name)
NULL    NULL

2 个答案:

答案 0 :(得分:2)

首先:setCount() => { // your code } TRY_CAST()TRY_CONVERT()将在不区分文化格式/样式代码< / em>。这将隐式依赖于系统的设置。至少对于日期/时间,这是从不做

在您的情况下,出于以下原因,我建议使用TRY_PARSE()

  • 您要将字符串值转换为键入的值。此过程称为解析
  • 如果以后知道任何详细信息,则可以添加文化/格式信息

TRY_PARSE()CONVERT多功能功能。您可以将任何内容投射到任何内容(只要投射有效)。 CAST将使用投射图来决定可以明确投射的内容。 CAST的功能大致相同,但是通过样式参数提供了更多控制。这是反对CONVERT的另一个原因:

  • 没有任何第三个参数,从不转换日期!

我的结论是:对我来说,正确的答案是TRY_CONVERT(主要是因为需要采取的操作是解析字符串)。但是问题确实很严重,并且与现实世界中的任何情况都相去甚远...

答案 1 :(得分:1)

根据documentation

  

仅将TRY_PARSE用于从字符串转换为日期/时间和数字   类型。

如果您的问题中未指定数据类型,则需要选择TRY_CONVERT函数。 如果要转换的类型是日期和数字,请使用TRY_PARSE函数。