首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想在oracle中为Difference将时间精简成特定的格式。

我想在oracle中为Difference将时间精简成特定的格式。
EN

Stack Overflow用户
提问于 2014-10-14 05:50:26
回答 1查看 82关注 0票数 0

当我取这两种时间的差异时,我需要显示它是积极的还是消极的。

代码语言:javascript
复制
select a.jobname,
       round((to_date(to_char(a.Lastupdatedatetime, 'DD/MM/YYYY HH:MI:SS AM'),
                      'DD/MM/YYYY HH:MI:SS AM') - 
              to_date(to_char(a.Creationdatetime, 'DD/MM/YYYY HH:MI:SS AM'),
                      'DD/MM/YYYY HH:MI:SS AM'))*24*60,2) as duration_Staging,
       round((to_date(to_char(b.Lastupdatedatetime, 'DD/MM/YYYY HH:MI:SS AM'),
                      'DD/MM/YYYY HH:MI:SS AM') -
              to_date(to_char(b.Creationdatetime,'DD/MM/YYYY HH:MI:SS AM'),
                      'DD/MM/YYYY HH:MI:SS AM'))*24*60,2) as duration_Prod,
       substr(((a.lastupdatedatetime - a.creationdatetime) - 
               (b.lastupdatedatetime - b.creationdatetime)), 11, 10) as Difference
  from production.scheduledjob a, 
       production.scheduledjob b
 where a.jobstatuscv='C' 
   and b.jobstatuscv='C' 
   and a.effectivedate=to_char(sysdate-3,'DD-MON-YYYY')
   and b.effectivedate=to_char(sysdate-4,'DD-MON-YYYY')
   and a.jobname=b.jobname order by Difference desc;

上面的查询输出是:

代码语言:javascript
复制
JOBNAME                 DURATION_STAGING    DURATION_PROD       DIFFERENCE
PershingStarToPace               90.43        145.4        -000000000 00:54:57.79
PershingUpdateMarketValue        15.05        54.53        -000000000 00:39:28.87

我需要如下产出:

代码语言:javascript
复制
JOBNAME                     DURATION_STAGING  DURATION_PROD   DIFFERENCE
PershingStarToPace               90.43        145.4           -00:54:57.79
PershingUpdateMarketValue        15.05        54.53           -00:39:28.87

表描述

代码语言:javascript
复制
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SCHEDULEDJOBID                            NOT NULL NUMBER(22)
 EFFECTIVEDATE                             NOT NULL DATE
 JOBSTATUSCV                                        VARCHAR2(10)
 CREATIONDATETIME                          NOT NULL TIMESTAMP(6)
 CREATEDBY                                          NUMBER(22)
 LASTUPDATEDATETIME                        NOT NULL TIMESTAMP(6)
 LASTUPDATEDBY                                      NUMBER(22)
 JOBID                                              NUMBER(22)
 SCHEMANAME                                NOT NULL VARCHAR2(100)
 MESSAGE                                            VARCHAR2(1000)
 JOBNAME                                            VARCHAR2(100)
 SERVERNAME                                         VARCHAR2(100)
 JOBGROUP                                           VARCHAR2(100)
 WORKGROUPID                                        NUMBER(22)
 JOBGROUPID                                         NUMBER(22)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-14 06:37:04

看起来,TO_CHAR()对于INTERVAL数据类型并不是真正可用的。因此,您必须手动执行,例如:

代码语言:javascript
复制
SELECT 
    REGEXP_SUBSTR(((a.lastupdatedatetime - a.creationdatetime) - (b.lastupdatedatetime - b.creationdatetime)), '^-?')
    || REGEXP_SUBSTR(((a.lastupdatedatetime - a.creationdatetime) - (b.lastupdatedatetime - b.creationdatetime)), '\d{2}:\d{2}:\d{2}\.\d{2}')
FROM ...

提取不起作用,因为前面的"-“是在每个组件之前添加的,即

代码语言:javascript
复制
SELECT
    EXTRACT(HOUR FROM ((a.lastupdatedatetime - a.creationdatetime) - (b.lastupdatedatetime - b.creationdatetime)) || ':' ||
    EXTRACT(MINUTE FROM ((a.lastupdatedatetime - a.creationdatetime) - (b.lastupdatedatetime - b.creationdatetime)) || ':' ||
    EXTRACT(SECOND FROM ((a.lastupdatedatetime - a.creationdatetime) - (b.lastupdatedatetime - b.creationdatetime))
FROM ...

例如,返回0:-54:-57.79

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26353482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档