我通过结束时间和开始时间计算出秒数,如何转成多少时多少分多少秒?
如:
1073秒成为0小时17分53秒?
如何写select语句?谢谢各位非常着急!

解决方案 »

  1.   

    select trunc(1073/(60*60)) 时,trunc((1073-trunc(1073/(60*60)))/60) 分,trunc(1073-60*trunc((1073-trunc(1073/(60*60)))/60)) 秒 from dual;
    我是直接算的
      

  2.   

    在楼上的改进一下:
    select trunc(1073/3600)||'小时'||trunc((1073-trunc(1073/3600))/60)||'分'||mod(1073,60)||'秒' from dual;
      

  3.   

    select to_char(trunc(sysdate,'dd') + 1073 / 86400,'hh24:mi:ss') from dual;
    这个能否接受,谁能把冒号改成汉字?
      

  4.   

    用这个试试select numtodsinterval(1073, 'second')
      from dual
      

  5.   

    我算了一下如果超过3600秒的话,sql语句就不对了!
      

  6.   

    select floor(693734/3600)||'小时'||floor(mod(693734,3600)/60)||'分'||mod(693734,60)||'秒' from dual
      

  7.   

    select trunc(693734/(60*60)) 时,trunc((693734-3600*trunc(693734/(60*60)))/60) 分,trunc(693734-60*trunc((693734-3600*trunc(693734/(60*60)))/60)-3600*trunc(693734/(60*60))) 秒 from dual;
    我的哪个bug已经修正了,不过还是10楼的简单
    ps:lz竟然在oracle版问数学问题-_-||
      

  8.   

    写个函数就ok了撒CREATE OR REPLACE FUNCTION GETLIMMITTIME(LIMMITTIME INTEGER,WORKTIME INTEGER) RETURN VARCHAR2
       IS
         NUMTEMP1 NUMBER;
         RETTIME VARCHAR2(200);   BEGIN
        -- 首先处理日期
        NUMTEMP1 := TRUNC(LIMMITTIME/(3600*WORKTIME));    IF NUMTEMP1>0 THEN
          RETTIME := NUMTEMP1 || '天';
        END IF;    --处理小时
        NUMTEMP1 := TRUNC(((LIMMITTIME/(3600*WORKTIME))-TRUNC((LIMMITTIME/(3600*WORKTIME)))) * WORKTIME);    IF NUMTEMP1 > 0 THEN
           RETTIME := RETTIME || NUMTEMP1 || '小时';
        END IF;    --处理分钟
           NUMTEMP1 := TRUNC((((LIMMITTIME/(3600*WORKTIME))-TRUNC((LIMMITTIME/(3600*WORKTIME)))) * WORKTIME
        -TRUNC(((LIMMITTIME/(3600*WORKTIME))-TRUNC((LIMMITTIME/(3600*WORKTIME)))) * WORKTIME))*60);    IF NUMTEMP1 > 0 THEN
           RETTIME := RETTIME || NUMTEMP1 || '分钟';
        END IF;    RETURN RETTIME;  END;
      

  9.   

    说明 WORKTIME  工作日(一天工作小时数 呵呵)
         LIMMITTIME  需要转化的时间 单位秒
      

  10.   


    我在TOAD中執行怎麼報錯?
      

  11.   

    select numtodsinterval(1073, 'second')  from dual;
      

  12.   

    CREATE OR REPLACE FUNCTION GETLIMMITTIME(LIMMITTIME INTEGER,WORKTIME INTEGER) RETURN VARCHAR2
       IS
         NUMTEMP1 NUMBER;
         RETTIME VARCHAR2(200);   BEGIN
        -- 首先处理日期
        NUMTEMP1 := TRUNC(LIMMITTIME/(3600*WORKTIME));    IF NUMTEMP1>0 THEN
          RETTIME := NUMTEMP1 || '天';
        END IF;    --处理小时
      
        NUMTEMP1 := TRUNC(mod(LIMMITTIME,3600*24)/3600);
        
        IF NUMTEMP1 > 0 THEN
           RETTIME := RETTIME || NUMTEMP1 || '小时';
        END IF;    --处理分钟
       
        NUMTEMP1 := TRUNC(mod(LIMMITTIME,3600)/60);
        
        IF NUMTEMP1 > 0 THEN
           RETTIME := RETTIME || NUMTEMP1 || '分钟';
        END IF;
        --处理秒钟
        NUMTEMP1 := mod(LIMMITTIME,60);
        
        IF NUMTEMP1 > 0 THEN
           RETTIME := RETTIME || NUMTEMP1 || '秒钟';
        END IF;
        
        RETURN RETTIME;  END;