2009-09-30 5 views
1

Я пытаюсь импортировать статистику NetBackup в Oracle. Одно поле, которое я действительно хочу, это ACTIVE START, но он недоступен из bpdbjobs -report. Что имеется в ACTIVEELAPSED, поэтому я хочу, чтобы вычесть, что с конца времени на импорт следующим образом:Oracle Вычитание даты с SQLLDR

END TIME Формат: 26/09/2009 10:46:20 PM

ELAPSED TIME Формат: 028: 32:35 (который часы, минуты, секунды)

SQL * Loader Control File (соответствующие строки):

ACTIVE_ELAPSED  BOUNDFILLER POSITION(261:270), 
END_TIME   POSITION(271:293) char "to_date(:End_time, 'dd/mm/yyyy hh:mi:ss AM')", 
ACTIVE_START  EXPRESSION "to_date(:END_TIME, 'dd/mm/yyyy hh:mi:ss AM') - TO_DSINTERVAL(':ACTIVE_ELAPSED')", 

Мой прибегая к помощи сообщает мне, что нет формата маски для интервала, так что я в настоящее время (Oracle SQL - это не мой обычный концерт!)

Джонатана

ответ

1

можно разделить истекшее время и преобразовать его в (фракции) дней, то вы можете вычитать его из END_TIME:

to_date(:END_TIME, 'dd/mm/yyyy hh:mi:ss AM') 
- substr(:elapsed_time, 1, instr(:elapsed_time, ':') - 1)/24 
- substr(:elapsed_time, 
     instr(:elapsed_time, ':') + 1, 
     instr(:elapsed_time, ':', 1, 2) - instr(:elapsed_time, ':') -1)/24/60 
- substr(:elapsed_time, instr(:elapsed_time, ':', 1, 2) + 1)/24/60/60 
+0

Я склоняюсь к вашей SQL величию! Мне пришлось сократить некоторые имена полей, чтобы не превышать предел 258 символов для токена в SQLDR, но работает отлично! –

+0

рад помочь =) –