Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara mengonversi format angka dari kolom terhitung ke format waktu (jj:mm:dd), kueri sql

Sebuah fungsi membuatnya lebih cantik. Ini mengembalikan jumlah hari diformat sebagai 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.

Contoh:

Tanpa itu, Anda mendapatkan angka desimal:

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

Dengan itu, Anda mendapatkan apa yang Anda inginkan:

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>

Ya, kode tersebut (atau yang serupa) dapat digunakan secara langsung dalam SQL, tetapi kode tersebut membuat SELECT jenis pernyataan jelek dan sulit dibaca.

Permintaan Anda akan menjadi

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

Lihat apakah itu membantu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa perbedaan antara USER() dan SYS_CONTEXT('USERENV','CURRENT_USER')?

  2. Batasan klausa Hibernate + Oracle IN, bagaimana cara mengatasinya?

  3. Konfigurasikan Hibernate untuk menggunakan Oracle's SYS_GUID() untuk Primary Key

  4. Oracle sql mengetik melalui dblink

  5. Apakah ada cara, di ORACLE, untuk menggabungkan beberapa baris baris menjadi satu, menggunakan dua tabel, di mana nilai akhir dipisahkan dengan koma?