2013-05-03 3 views
3

Я пытаюсь использовать новую функцию try_convert в mssql2012 для преобразования строки даты/времени/смещения в datetimeoffset.Что не так с этим использованием try_convert?

Строка выглядит следующим образом: 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

Как вы знаете, что ошибка не исходит из другой части вашего SQL заявления? – RBarryYoung

+0

@RBarryYoung Я получаю ту же ошибку, если я попытаюсь выполнить sqlfiddle: http://sqlfiddle.com/#!6/d41d8/3912 – Lamak

ответ

5

Вы получаете ошибку из-за CAST заявления внутри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

Working Fiddle of your code here.

+1

примерно в то время, когда вы разместили это, я только что удалил бросок! :) Ха! Конечно, он правильно проверяет ... теперь, когда мы выяснили проблему «plditallo»! :) – plditallo

+0

Спасибо всем! извините за вторжение. – plditallo

Смежные вопросы