2009-09-30 45 views
1

我正尝试将NetBackup统计数据导入到Oracle中。我真正想要的一个字段是ACTIVE START,但它不可用于bpdbjobs -report。什么是可用的ACTIVEELAPSED,所以我想减去从结束时间进口如下:使用SQLLDR Oracle日期减法

结束时间格式:26/09/2009下午十时46分20秒

已用时间格式:028: 32:35(这是小时,分钟,秒)

SQL * Loader控制文件(相关线路):

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伟大!我必须缩短一些字段名称,以免超过SQLDR中令牌的258个字符限制,但完美地工作! – 2009-09-30 07:00:43

+0

很乐意帮忙=) – 2009-09-30 08:25:29