2014-10-06 2 views
0

У меня есть набор данных формата excel, который необходимо импортировать в таблицу, один столбец - дата, но данные хранятся в числовом формате, таком как 41275, при импорте данные, я попытался выбрать формат данных yyyy-mm-dd, он дает ошибку: недействительный месяц, также пробовал MM/DD/YYYY и ошибку: день месяца должен быть от 1 до последнего дня месяца. кто-нибудь знает, что это за номер и как я могу преобразовать его в формат даты при импорте его в базу данных? Спасибо!как преобразовать число на сегодняшний день в oracle sql developer

+0

что отличное дает вам количество дней с 1 января 1900 года ... – DarkSquirrel42

+0

@ DarkSquirrel42 Я не понимаю, как конвертировать число в формат даты? это число означает определенную дату? – user2810081

+0

Я думаю, что лучший способ изменить тип ячейки на текст, возможно, использовать для нее другой столбец '= text (Date_col, 'yyyy.mm.dd')', чем экспорт csv. Теперь у вас есть delimetered csv где даты yyyy.mm.dd, и теперь вы можете легко импортировать без ошибок. Или если вы знакомы с java, напишите просто код с excel api, прочитайте все строки и вставьте с помощью jdbc. (Я использую это, если я импортирую огромную сумму и нуждаюсь в получении дат, если малое количество, просто просто передаю содержимое ячеек и импортирую без проблем) – Csanesz

ответ

0

Номер, который вы получили это представление первенствует на определенную дату ...

первенствует хранит дату как количество дней, начиная рассчитывать на определенную дату ..., чтобы быть точным:

1 = 1-JAN-1900
2 = 2-JAN-1900
...
30 = 30-JAN-1900

так, чтобы получить номер первенствовать в качестве даты оракула, вы можете попробовать что-то вроде этого ...

to_date('1899-12-31','yyyy-mm-dd') + 41275 
+1

Остерегайтесь ошибки 1900-leapyear-ошибки Excel ;-) http://support2.microsoft.com/kb/214326/ru-us –

+0

И будьте осторожны с функцией 'date_add', которая не существует в Oracle и неправильным написанием литерала' interval'. ;-) – nop77svk

+0

@ nop77svk хорошо, насколько я могу видеть, что date_add не проблема с oracle ... по крайней мере в течение нескольких дней, это сводится к «+» – DarkSquirrel42

2

Выражение (относительно високосного года ошибка в Excel в AmmoQ упоминает), вы ищете:

case 
    when yourNumberToBeImported <= 59 then date'1899-12-31' + yourNumberToBeImported 
    else date'1899-12-30' + yourNumberToBeImported 
end 

Затем вы можете либо

  • Создать (глобальный) временную таблицу в вашем БД Oracle, загрузите данные из Excel в таблицу, а затем перезагрузите данные из временной таблицы в целевую таблицу, включив приведенный выше расчет.

или вы можете

  • Загрузите данные из Excel в постоянные таблицы в вашей БД Oracle и создать вид на постоянная таблицы, которая будет содержать выше расчет.
Смежные вопросы