sql >> データベース >  >> RDS >> Oracle

計算列の数値形式を時間(hh:mm:ss)形式に変換する方法、SQLクエリ

    関数はそれをより美しくします。 日数を返します dd:hh:mi:ssとしてフォーマットされています 。

    SQL> create or replace function f_days2ddhhmiss (par_broj_dana in number)
      2     return varchar2
      3  is
      4     l_broj_dana  number := par_broj_dana;
      5     retval       varchar2 (20);
      6  begin
      7     with podaci
      8          as (select trunc (l_broj_dana) broj_dana,
      9                     round (mod (l_broj_dana * 24, 24), 2) broj_sati,
     10                     round (mod (l_broj_dana * 24 * 60, 60), 2) broj_minuta,
     11                     round (mod (l_broj_dana * 24 * 60 * 60, 60), 2)
     12                        broj_sekundi
     13                from dual)
     14     select    lpad (p.broj_dana, 2, '0')
     15            || ':'
     16            || lpad (trunc (p.broj_sati), 2, '0')
     17            || ':'
     18            || lpad (trunc (p.broj_minuta), 2, '0')
     19            || ':'
     20            || lpad (trunc (p.broj_sekundi), 2, '0')
     21       into retval
     22       from podaci p;
     23
     24     return retval;
     25  end f_days2ddhhmiss;
     26  /
    
    Function created.
    

    例:

    これがないと、10進数になります:

    SQL> select to_date('07.08.2020 14:25', 'dd.mm.yyyy hh24:mi:ss')
      2       - to_date('03.08.2020 13:20', 'dd.mm.yyyy hh24:mi:ss') result
      3  from dual;
    
        RESULT
    ----------
    4,04513889
    

    それで、あなたはあなたが望むものを手に入れます:

    SQL> select f_days2ddhhmiss(to_date('07.08.2020 14:25', 'dd.mm.yyyy hh24:mi:ss')
      2                       - to_date('03.08.2020 13:20', 'dd.mm.yyyy hh24:mi:ss')
      3                        ) result
      4  from dual;
    
    RESULT
    --------------------------------------------------------------------------------
    04:01:05:00
    
    SQL>
    

    はい、そのような(または同様の)コードはSQLで直接使用できますが、SELECTになります 醜いのようなステートメント 読みにくいです。

    クエリは次のようになります

    SELECT m.numos,
           m.codfuncos,
           m.dtinicioos,
           m.dtfimseparacao,
           f_days2ddhhmiss (m.dtfimseparacao - m.dtinicioos) AS tempo
      FROM pcmovendpend m
     WHERE     dtfimseparacao IS NOT NULL
           AND data >= SYSDATE - 1
    

    それが役立つかどうかを確認してください。



    1. H2は、単一の列の照合定義をサポートしていますか?

    2. MySQLで一重引用符をエスケープする方法

    3. NHibernateとの分散トランザクションに参加できません

    4. テーブルの値を使用したPostgresINTERVAL