SQl Server Преобразование в дату не удается, DateTime работает - PullRequest
0 голосов
/ 01 июля 2019

У меня есть таблица со столбцом varchar(25), которая содержит значение даты.Типичное значение - «11/04/2017».

Этот запрос возвращает 0 строк

select * 
from myTable  
where isdate(inputDate) = 0

Я пытаюсь найти максимум по этому, используя сортировку по дате.

Этот запрос возвращает ожидаемый результат

;with gooddates as 
(
    select 
        medcomfolder, PatientId, PatientBirthday, InputDate 
    from 
        myTable 
    where 
        isdate(inputDate) = 1
)
select max(convert(datetime, inputDate)) 
from gooddates

Этот запрос возвращает ошибку.

;with gooddates as 
(
     select 
         medcomfolder, PatientId, PatientBirthday, InputDate 
     from 
         dwhFuData   
     where 
         isdate(inputdate) = 1
)
select max(convert(date, inputdate)) 
from gooddates

Это возвращаемая ошибка

Сообщение 241, Уровень 16, Состояние 1, Строка 274
Ошибка преобразования при преобразовании даты и / или времени из строки символов

Разница между двумя запросами заключается в том, что первый конвертируется в dateTime, а второй - в дату.

На данный момент я могу двигаться вперед с параметром dateTime, но мне остается только подумать, что мне не хватает.

Я проверил, что нет встроенных пробелов, и у всех столбцов есть len(InputDate) = 10 (данные о времени НЕ включены)

Я выбрал отдельные значения, поместил их в Excel исделал функцию даты в каждой строке.Я надеялся получить # VALUE в 1 ряду.Все ряды работали.

Так что нет ничего глупого, как «02/31/2019».

Как может проходить преобразование dateTime, если преобразование простой даты не проходит?

1 Ответ

1 голос
/ 01 июля 2019

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

Если это так, одним простым решением будет использование convert(date, left(inputdate, 10)).Другое решение использует try_convert():

try_convert(date, inputdate)

Чтобы найти ошибочные значения:

select inputdate
from dwhFuData
where try_convert(date, inputdate) is null and inputdate is not null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...