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