我正在尝试使用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,
答案 0 :(得分:5)
由于CAST
语句在<{>>内部1}} try_convert
- try_convert
赢得了所有错误,您收到错误生成,如果您的转换失败,它将返回NULL
。
如果您对两次尝试都使用try_convert
,那么它将起作用:
when try_convert(datetimeoffset, (try_convert(datetimeoffset, substring(@DateString,1,10) + ' ' + substring(@DateString,12,8) + ' ' + substring(@DateString,20,6)))) IS NULL