Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách chuyển đổi định dạng số của một cột được tính toán sang định dạng thời gian (hh:mm:ss), truy vấn sql

Một chức năng làm cho nó đẹp hơn. Nó trả về số ngày được định dạng là 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.

Ví dụ:

Nếu không có nó, bạn sẽ nhận được một số thập phân:

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

Với nó, bạn sẽ có được những gì bạn muốn:

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>

Có, mã như vậy (hoặc tương tự) có thể được sử dụng trực tiếp trong SQL, nhưng nó tạo ra một SELECT tuyên bố kiểu xấu xí và khó đọc.

Truy vấn của bạn sau đó sẽ là

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

Xem nó có hữu ích không.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tên bảng động trong con trỏ

  2. Oracle JDBC:tên người dùng / mật khẩu không hợp lệ (hoặc-01017)

  3. Làm cách nào để tạo một bảng Oracle với các bảng kiểu đối tượng lồng nhau?

  4. Oracle SQL Hours Sự khác biệt giữa các ngày trong HH:MM:SS

  5. Tại sao Oracle SQL không cho phép chúng ta sử dụng bí danh cột trong mệnh đề GROUP BY?