2014-01-29 3 views
11

Итак, я пытаюсь преобразовать строки в базу данных SQL в значения datetime.Как обрабатывать ошибку преобразования даты в SQL?

У меня есть несколько дат в таблице так:

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, проанализировано, 103)) было бы хорошо, за исключением того, что функция преобразования не возвращает NULL, когда она терпит неудачу.

+0

быть ясно, что строки в дд/мм/гггг чч: мм: сс – sav

ответ

18

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

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

Я предпочел бы не делать какие-либо изменения в базе данных I» м используя. т.е.: я бы предпочел изменить SET DATEFORMAT dmy; если изменение не существует только в течение продолжительности запроса. – sav

+0

Это не делает никаких изменений в базе данных, это только для проверки длительности выполнения запроса. –

+0

Для этого мне нужно установить SET DATEFORMAT в dmy. – sav

1

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

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

должно быть 11 символов SELECT CONVERT (datetime, SUBSTRING (проанализировано, 0, 11), 103) – sav

8

Вы можете использовать TRY_CONVERT или TRY_CAST функции

+2

Обратите внимание, что эти функции доступны только в SQL Server 2012 и далее (110) – tr3v

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