3

我正在尝试使用 mssql2012 中的新 try_convert 功能将日期/时间/偏移字符串转换为 datetimeoffset。

字符串看起来像:2013-04-25T21:56:58.077-05:00

这是代码——我知道这种解析不起作用,所以我希望结果会达到“IS NULL”并返回“Cast Failed”。这不是发生的事情——相反,我仍然收到 Msg 241 日期转换错误。有任何想法吗?

case  
   when try_convert(datetimeoffset, (cast(substring(lift.PlannedLiftDateTime,1,10) + ' ' + substring(lift.PlannedLiftDateTime,12,8) + ' ' + substring(lift.PlannedLiftDateTime,20,6) as datetimeoffset))) IS NULL
    then 'Cast Failed'
   when ltrim(rtrim(lift.PlannedLiftDateTime)) = ''
    then NULL
   else
    '~' + lift.PlannedLiftDateTime + '~'
end as PlannedLiftDateTime,
4

1 回答 1

5

您收到错误是因为 - 中的语句不会消耗CAST您生成的所有错误,如果您的转换失败,它只会返回。try_converttry_convertNULL

如果您同时使用try_convert这两种尝试,它将起作用:

when try_convert(datetimeoffset, (try_convert(datetimeoffset, substring(@DateString,1,10) + ' ' + substring(@DateString,12,8) + ' ' + substring(@DateString,20,6)))) IS NULL

您的代码的工作小提琴在这里。

于 2013-05-03T20:47:27.717 回答