Как обрабатывать ошибку преобразования даты в SQL?

поэтому я пытаюсь преобразовать строки в SQL databse в значения datetime.

у меня есть некоторые даты в таблице, как это:

23/12/2013 16:34:32
24/12/2013 07:53:44
24/12/2013 09:59:57
24/12/2013 12:57:14
24/12/2013 12:48:49
24/12/2013 13:04:17
24/12/2013 13:15:47
24/12/2013 13:21:02
24/12/2013 14:01:28
24/12/2013 14:02:22
24/12/2013 14:02:51

они хранятся в виде строк, к сожалению

и я хочу преобразовать их в datetime

SELECT CONVERT(datetime, analysed, 103 )
FROM OIL_SAMPLE_UPLOAD

однако я получаю это сообщение при запуске запроса

преобразование типа данных varchar в тип данных datetime привело в диапазону значение.

предположительно, потому что некоторые значения плохо сформированы (хотя я еще не заметил ни одного из них)

это нормально, если некоторые значения не преобразуются, мне просто нужен способ справиться с этой ситуацией.

что-то вроде ISNULL(CONVERT(datetime, analysed, 103 )) было бы хорошо, за исключением того, что функция convert не возвращает NULL при сбое.

3 ответов


для SQL Server можно использовать ISDATE () функция, чтобы проверить, является ли значение допустимой датой

SELECT CASE WHEN ISDATE(analysed)=1 THEN CONVERT(datetime, analysed, 103 ) 
            ELSE '' END
FROM OIL_SAMPLE_UPLOAD

можно использовать TRY_CONVERT или то try_cast функции


Если вы просто хотите даты, то взять SUBSTRING и вычислить дату следующим образом. Это может дать вам правильную часть даты, по крайней мере.

SELECT CONVERT(datetime, SUBSTRING(analysed, 0, 11), 103 )
FROM OIL_SAMPLE_UPLOAD