比如下面这个sql里trunc((T2.C700020016-T2.C700020015)/60/60/24,0))用了好几次,我想给他取个别名,但是不能作为sql的查询结果显示出来
select decode(trunc((T2.C700020016-T2.C700020015)/60/60/24,0),0,'00',CASE WHEN length(trunc((T2.C700020016-T2.C700020015)/60/60/24,0)))>1 then trunc((T2.C700020016-T2.C700020015)/60/60/24,0)) else ('0' || trunc((T2.C700020016-T2.C700020015)/60/60/24,0))) end || '天' || decode(trunc(mod((T2.C700020016-T2.C700020015),60*60*24)/60/60,0),0,'00',trunc(mod((T2.C700020016-T2.C700020015),60*60*24)/60/60,0)) || '小时' || decode(trunc(mod((T2.C700020016-T2.C700020015),60*60)/60,0),0,'00',trunc(mod((T2.C700020016-T2.C700020015),60*60)/60,0)) || '分' from t153 t2

解决方案 »

  1.   

    这是一个算2个毫秒值间差天,时,分的sql,我现在想在天数是各位时在前面加个0,怎么加让sql尽量短呢?
    select decode(trunc((1343873132-1343706107)/60/60/24,0),0,'00',trunc((1343873132-1343706107)/60/60/24,0)) || '天' || decode(trunc(mod((1343873132-1343706107),60*60*24)/60/60,0),0,'00',trunc(mod((1343873132-1343706107),60*60*24)/60/60,0)) || '小时' || decode(trunc(mod((1343873132-1343706107),60*60)/60,0),0,'00',trunc(mod((1343873132-1343706107),60*60)/60,0)) || '分' from dual
      

  2.   

    再套个查询就可以了吧
    select decode(a........) from (
      select t2.*,trunc((T2.C700020016-T2.C700020015)/60/60/24,0) a,trunc(mod((T2.C700020016 - T2.C700020015), 60 * 60) / 60, 0) b from (
      from t153 t2)  )
      

  3.   

    WITH r AS
     (SELECT (1343873132 - 1343706107) x FROM dual)
    SELECT lpad(trunc(x / 60 / 60 / 24), 2,0) || '天' ||
           lpad(trunc(MOD(x, 60 * 60 * 24) / 60 / 60), 2,0) || '小时' ||
           lpad(trunc(MOD(x, 60 * 60) / 60), 2,0) || '分'
    FROM   r
      

  4.   


    WITH r AS
     (SELECT Numtodsinterval(1343873132 - 1343706107,'SECOND')  x FROM dual)
    SELECT lpad(EXTRACT(DAY FROM x),2,0)||'天'||
           lpad(EXTRACT(HOUR FROM x),2,0)||'小时'||
           lpad(EXTRACT(MINUTE FROM x),2,0)||'分'
    FROM r