ну, у тебя тут настоящая проблема.
07.07.1994 действителен для «ММ / ДД / ГГГГ» и «ДД / ММ / ГГГГ»
Однако, помимо этой проблемы, вы можете попробовать вложение декодирования.
Я ввел следующие даты в поле varchar:
01/12/2009, 01-12-2009, 2009-01-12, 01/12/09
и, используя приведенное ниже, меня последовательно возвращали 12.01.2009. Вы должны будете выяснить все возможные шаблоны и продолжать вложение. Другая вещь, которую вы можете сделать, это создать функцию для обработки этого. Внутри функции вы можете проверить немного более подробно относительно формата даты. Это также будет легче читать. Вы можете использовать эту функцию в своем операторе обновления, чтобы она была быстрее, чем цикл, как вы упоминали.
(что бы ни стоило, цикл по 500 тыс. строк не должен занимать много времени. Мне регулярно приходится обновлять таблицы по строкам строк из 12 миллионов записей)
выберите mydate,
декодирования (Instr (MyDate, '-'), 5, TO_DATE (MyDate, 'YYYY-MM-DD'), 3, TO_DATE (MyDate, 'ДД-ММ-ГГГГ'),
decode (длина (mydate), 8, to_date (mydate, 'MM / DD / YY'), 10, to_date (mydate, 'MM / DD / YYYY'))))
от mydates;
и вот заявление об обновлении:
обновить набор mydates revdate = decode (instr (mydate, '-'), 5, to_date (mydate, 'YYYY-MM-DD'), 3, to_date (mydate, 'MM-DD-YYYY'),
decode (длина (mydate), 8, to_date (mydate, «MM / DD / YY»), 10, to_date (mydate, «MM / DD / YYYY»)))