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

Trừ dấu thời gian trong oracle trả về dữ liệu kỳ lạ

Tôi đoán các cột của bạn được xác định là timestamp thay vì date .

Kết quả của việc trừ dấu thời gian là một khoảng interval trong khi kết quả của phép trừ date cột là một số đại diện cho số ngày giữa hai ngày.

Điều này được ghi lại trong sách hướng dẫn:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i48042

Vì vậy, khi bạn truyền các cột dấu thời gian của mình cho đến nay, bạn sẽ nhận được những gì bạn mong đợi:

with dates as (
   select timestamp '2012-04-27 09:00:00' as col1,
          timestamp '2012-04-26 17:35:00' as col2
   from dual
)
select col1 - col2 as ts_difference,
       cast(col1 as date) - cast(col2 as date) as dt_difference
from dates;

Chỉnh sửa :

Nếu bạn muốn chuyển đổi khoảng thời gian như vậy, ví dụ:số giây (dưới dạng số), bạn có thể làm như sau:

with dates as (
   select timestamp '2012-04-27 09:00:00.1234' as col1,
          timestamp '2012-04-26 17:35:00.5432' as col2
   from dual
)
select col1 - col2 as ts_difference,
       extract(hour from (col1 - col2)) * 3600 +  
       extract(minute from (col1 - col2)) * 60 + 
       (extract(second from (col1 - col2)) * 1000) / 1000 as seconds
from dates;

Kết quả ở trên là 55499.5802



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chính sách vá lỗi

  2. Số ngày thứ sáu giữa hai ngày

  3. Làm thế nào để tạo một kết xuất với Oracle PL / SQL Developer?

  4. Cách tạo Bảng lịch trong Oracle

  5. Cách thanh lịch để trả về 'kích thước tệp' có thể đọc được của tệp được lưu trữ trong cột oracle blob bằng cách sử dụng SQL là gì?