PL / SQL Преобразовать строку в дату, когда некоторые значения не в формате даты?

У меня есть строковое поле, где 99% записей находятся в формате, который можно преобразовать в дату, т.е. To_DATE(' 20100501', 'yyyymmdd') отлично подойдет. Однако около 1% записей относятся к типу '00000000' или '00000500'. Поэтому, когда я пытаюсь применить функцию TO_DATE ко всем значениям, то есть SELECT TO_DATE(datefield, 'yyyymmdd'), результатом будет ошибка (not a valid month/year), потому что год или месяц недействительны для некоторых записей. Я не понимаю, что здесь делать. Возможно, я смогу сделать функцию TO_DATE частью подзапроса после применения проверки даты? Может быть, преобразовать эти форматы без даты во что-то вроде 19000101, чтобы избежать ошибки ???


person Dan    schedule 01.11.2013    source источник
comment
все ваши неработающие даты начинаются с 0000, или это всего лишь пример возможных неправильных дат?   -  person Raphaël Althaus    schedule 01.11.2013
comment
Пожалуйста, отредактируйте свое сообщение и включите запрос, с которым вы работаете. Спасибо.   -  person Bob Jarvis - Reinstate Monica    schedule 01.11.2013


Ответы (1)


Лучшее решение - сначала преобразовать разорванные значения в допустимые даты (или в null или сохранить их в новом поле), а затем преобразовать столбец в тип DATE.

Использование столбцов VARCHAR для значений DATE - плохой дизайн по многим причинам. Вы наткнулись на одного из них.

person Klas Lindbäck    schedule 01.11.2013