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

Итак, я пытаюсь преобразовать строки в базу данных SQL в значения 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 в тип данных даты и времени в значении вне диапазона.

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

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

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

Ответ 1

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

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

Ответ 3

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

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