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

Oracle hiển thị hơn 24 giờ

Bạn cần tách chênh lệch thời gian thành các yếu tố ngày, giờ, phút và giây cấu thành của nó, kết hợp số ngày * 24 với số giờ và gắn chúng lại với nhau.

Khi trừ ngày, bạn nhận được sự khác biệt dưới dạng số ngày, vì vậy bạn cần chuyển phần phân số thành các phần tử khác, điều này bạn có thể thực hiện với sự kết hợp của trunc và mod; sử dụng CTE để làm cho việc theo dõi này dễ dàng hơn một chút và hiển thị từng giá trị riêng cũng như được kết hợp thành một chuỗi duy nhất:

with y as (
  select id, end_time - start_time as runtime
  from mytable
)
select id,
  runtime,
  trunc(runtime) as days,
  24 * trunc(runtime) as day_hours,
  trunc(24 * mod(runtime, 1)) as hours,
  trunc(60 * mod(24 * (runtime), 1)) as minutes,
  trunc(60 * mod(24 * 60 * (runtime), 1)) as seconds,
  lpad(24 * trunc(runtime)
    + trunc(24 * mod(runtime, 1)), 2, '0')
    ||':'|| lpad(trunc(60 * mod(24 * (runtime), 1)), 2, '0')
    ||':'|| lpad(trunc(60 * mod(24 * 60 * (runtime), 1)), 2, '0')
    as runtime
from y;

        ID    RUNTIME       DAYS  DAY_HOURS      HOURS    MINUTES    SECONDS RUNTIME 
---------- ---------- ---------- ---------- ---------- ---------- ---------- --------
         1 .184918981          0          0          4         26         16 04:26:16 
         2 1.14465278          1         24          3         28         18 27:28:18 

Bạn cũng có thể chuyển đổi ngày tháng thành dấu thời gian để tính toán, cung cấp cho bạn loại khoảng thời gian và sau đó sử dụng extract hàm để lấy các phần tử thay thế; mặc dù hiệu trưởng vẫn giống nhau:

with y as (
  select id,
    cast(end_time as timestamp) - cast (start_time as timestamp) as runtime
  from mytable
)
select id,
  runtime,
  extract (day from runtime) as days,
  24 * extract (day from runtime) as day_hours,
  extract (hour from runtime) as hours,
  extract (minute from runtime) as minutes,
  extract (second from runtime) as seconds,
  lpad(24 * extract (day from runtime) + extract (hour from runtime), 2, '0')
    ||':'|| lpad(extract (minute from runtime), 2, '0')
    ||':'|| lpad(extract (second from runtime), 2, '0')
    as runtime
from y;

        ID RUNTIME           DAYS  DAY_HOURS      HOURS    MINUTES    SECONDS RUNTIME 
---------- ----------- ---------- ---------- ---------- ---------- ---------- --------
         1 0 4:26:17.0          0          0          4         26         17 04:26:17 
         2 1 3:28:18.0          1         24          3         28         18 27:28:18 

Hoặc một biến thể nhỏ, nhận sự khác biệt so với các ngày và sau đó chuyển đổi đó thành một khoảng thời gian:

with y as (
  select id,
    numtodsinterval(end_time - start_time, 'DAY') as runtime
  from mytable
)
...

Bản trình diễn SQL Fiddle.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối Phần mềm IRI với Oracle

  2. Cách tích hợp Oracle và Kafka

  3. Lỗi rút phích cắm PDB ORA-17528

  4. Cách tách một chuỗi được phân tách bằng dấu phẩy trong Oracle

  5. Lỗi Oracle ORA-12154 trên IIS cục bộ, nhưng không phải với Máy chủ phát triển Visual Studio