ошибка в преобразовании даты и времени из текстового поля - PullRequest
0 голосов
/ 01 сентября 2011

У меня есть подзапрос, который преобразует текстовую колонку в дату и время. Так как это в текстовом формате, есть столбцы, которые содержат неверные данные. Я знаю, что первый ответ будет исправить данные, я полностью согласен с этим. У меня нет привилегий для этого, к сожалению, мне приходится иметь дело с этим.

ниже мой запрос

INNER JOIN TABLE XYZ
ON XYZ.COLOUMN1=YZX.COLOUMN2
LEFT JOIN ( SELECT ABC.stu_id
           ABC.stu_name
           CONVERT(DATETIME,LMN.startDate,111) STARTDATE
           CONVERT(DATETIME,LMN.endDate,111) ENDDATE
FROM STUDENT ABC
INNER JOIN AN_STUDENT_TABLE LMN
            ON ABC.stu_id=LMN.stu_id
WHERE ISDATE(startDate)=1
AND   ISDATE(endDate)=1
GROUP BY ABC.stu_id,ABC.stu_name,STARTDATE,ENDDATE) DIN  ON DIN.stu_id=LMNOP.stu_id
WHERE e.date BETWEEN DIN.STARTDATE AND DIN.ENDDATE 

когда я сравниваю e.date с начальной и конечной датой, она не срабатывает, давая мне хорошо известную ошибку

"The conversion of a varchar data type to a datetime data type resulted in an out-of-range value."

что можно сделать, чтобы хотя бы пропустить те плохие записи данных, которые не могут быть преобразованы? Я старался изо всех сил, чтобы понять это, но не получилось. Любая помощь / совет оценен!

1 Ответ

0 голосов
/ 01 сентября 2011

Ваш ISDATE в предложении where не обязательно отфильтровывает плохие даты перед их использованием в конверсии.

Я думаю, вы должны сделать это в два этапа.Сначала создайте временную таблицу или переменную таблицы, которая содержит строки из STUDENT, где startDate и endDate верны (используйте для этого ISDATE), а затем используйте эту таблицу в вашем фактическом запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...