2012-04-12 8 views
2

У меня есть строковый столбец, который содержит следующие данные в качестве примераOracle TO_DATE головную боль

10/20/2005 15:08:00 
11252011 15:22:40 

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

Однако в моей попытке скопировать данные через к новому темпу колонку я получаю ошибку:

ERROR 
ORA-01861: literal does not match format string 

Вот SQL:

update mytable set MYDATE_TEMP = to_date(mystringcol, 'yyyy/mm/dd hh24:mi:ss') 

Есть ли способ, чтобы скопировать данные через?

+0

У вас есть данные, которые не соответствуют указанному формату даты. Попробуйте найти эти данные, и если это действительно так, вам может потребоваться использовать функции декодирования, случая или замены ... В противном случае вам может понадобиться написать функцию, которая принимает столбцы в качестве входных данных, и возвращает либо дату, либо строку, либо date – Lock

ответ

6

Если только эти 2 форматы, которые нужно обрабатывать попробовать:

update mytable set MYDATE_TEMP = to_date(replace(mystringcol,'/',''), 
             'mmddyyyy hh24:mi:ss') 
+1

Если у вас много форматов, вам может понадобиться функция PL/SQL, которая будет принимать строку, попробуйте кучу форматов и вернет дату. Один из способов - это вложенная серия v_return: = to_date (in_text, ; исключение, если другие - v_return: = <попробуйте следующий формат>. Если вы делаете это много, определите именованное исключение для ORA-1861. одноразовое исправление данных, я бы просто использовал «когда другие» –

+0

не нравится, я думаю, это должно быть mmddyyyy hh24: mi: ss – Jon

+0

да это должно - исправлено ответ –

0

Для первой вы можете использовать:

update mytable set MYDATE_TEMP = to_date(mystringcol, 'mm/dd/yyyy hh24:mi:ss'); 

Для второго:

update mytable set MYDATE_TEMP = to_date(mystringcol, 'mmddyyyy hh24:mi:ss'); 
Смежные вопросы