Oracle. Проверка корректности формата дат | |
---|---|
Pekpytep Сообщений: 727 Откуда: Луганск Дата регистрации: 19.10.2010 |
Всем привет.
Возникла необходимость проверки даты при импорте из csv в БД. Изобрел вот такой велосипед с квадратными колесами:
Есть ли более простой способ проверить дату неизвестного формата в текстовом виде на корректность? |
Re: Oracle. Проверка корректности формата дат | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Строку неизвестного формата проверить невозможно в принципе. Как и трактовать её - что как дату, что как число... Если ТОЧНО известно что могут быть такой, такой и вот такой форматы - это другое дело. Если форматы непротиворечивы то можно пытаться их разбирать. В частности формат DD-MM-YYYY будет противоречить формату MM-DD-YYYY. Если в исходных данных может быть и то и это, то трактовать "как дату" такое нельзя - это гарантированно будет приводить к ошибкам. Не говоря уж о разновидностях с 2-значными годами... P.S. В REGEXP_LIKE используется синтаксис регулярок, а не SQL-ного LIKE. Скажем для указанных двух форматов можно попробовать регулярки '[0-3]\d\.[0-1]\d\.[1-2]\d{3}' и соответственно '[0-1]\d/[0-3]\d/[1-2]\d{3}' Конечно же от 32 мая или от 13-го месяца, не говоря уж о 29 февраля в невисокосном году это не убережёт, поэтому to_date() надо и в этих случаях внутри блока с обработчиком ошибок применять. Года я явно ограничил 1*** и 2***-ми. Можно и строже сделать, ограничив лишь 19** и 20**-ми. ------------------ WBR, Igor |
Re: Oracle. Проверка корректности формата дат | |
---|---|
Pekpytep Сообщений: 727 Откуда: Луганск Дата регистрации: 19.10.2010 |
В принципе, я сторонник стандартизации файлообмена между подразделениями и организациями, но мое непосредственное начальство, к сожалению, считает иначе. Не хочу лепить разбор всех мыслимых и немыслимых возможных форматов, а утвержденного формата пока нет и не факт что будет. Этим кодом я принимаю два наиболее распространенных формата даты, иначе считаю дату некорректной и пусть они тогда сами себе будут злобными буратинами. Да, стормозил. Подразумевал
|
Re: Oracle. Проверка корректности формата дат | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ну функция конвертации как раз и выполняет проверку корректности
Правда между 2 января и 1 февраля записанными в разных форматах она, естественно, никак не сможет разобраться. Это я и имел в виду - 31.01 никогда "по ошибке" не превратится в 1 число 31-го месяца, а вот 01.02 - запросто. Поэтому так опасно принимать на себя обязательства по разбору откровенного мусора. Кто будет крайним когда вылезет вот такая ерунда? ------------------ WBR, Igor |
© 2000-2024 Fox Club  |