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

TIMESTAMPDIFF trong Oracle 11g?

Chức năng đó không tồn tại trong Oracle RDMBS; nó rõ ràng đã làm được trong Oracle Lite (mà tôi chưa bao giờ gặp phải) và tôi tin rằng nó có trong các cơ sở dữ liệu khác như MySQL.

Có tài liệu bao gồm ngày giờ và số học khoảng thời gian điều đó sẽ giúp bạn có được một phần của con đường đến đó; bạn có thể trừ một dấu thời gian này cho một dấu thời gian khác; hoặc ngày này với ngày khác, hoặc kết hợp cả hai - nhưng đơn giản hơn là gắn vào một kiểu dữ liệu. Tùy thuộc vào cách bạn sử dụng, bạn sẽ nhận được một khoảng thời gian hoặc một số đại diện cho số ngày:

SQL> SELECT CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00' FROM DUAL;

CURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00'
---------------------------------------------------------------------------
+000006169 16:16:21.287166000

SQL> SELECT CURRENT_DATE - DATE '1998-12-09' FROM DUAL;

CURRENT_DATE-DATE'1998-12-09'
-----------------------------
                   6169.67775

Nếu bạn chỉ muốn số ngày cả ngày, bạn có thể sử dụng extract() để khoảng thời gian chỉ nhận được phần tử bạn muốn hoặc trunc() cho số để loại bỏ phần phân số:

SQL> SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00') FROM DUAL;

EXTRACT(DAYFROMCURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00')
---------------------------------------------------------------
                                                           6169

SQL> SELECT TRUNC(CURRENT_DATE - DATE '1998-12-09') FROM DUAL;

TRUNC(CURRENT_DATE-DATE'1998-12-09')
------------------------------------
                                6169

Bạn cũng có thể trunc() ngày hiện tại trước khi so sánh nếu bạn muốn, vì vậy bạn đang so sánh cả hai vào lúc nửa đêm, điều đó có nghĩa là sẽ không có phần ngày phân số để loại bỏ:

SQL> SELECT TRUNC(CURRENT_DATE) - DATE '1998-12-09' FROM DUAL;

TRUNC(CURRENT_DATE)-DATE'1998-12-09'
------------------------------------
                                6169

Tôi đã sử dụng các ký tự ngày ANSI cho ngày cố định, nhưng bạn có thể sử dụng biến hoặc cột ngày hoặc dấu thời gian hiện có; hoặc to_date() hoặc to_timestamp() nếu bạn có một chuỗi ở định dạng khác.

Bạn cũng có thể sử dụng extract() để chuyển đổi các thành phần của khoảng thời gian thành giá trị kết hợp, như được hiển thị ở đây ; và cũng đảm bảo rằng bạn biết sự khác biệt giữa current_datesysdate và các dấu thời gian tương đươ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. Chức năng tổng hợp Oracle để trả về một giá trị ngẫu nhiên cho một nhóm?

  2. Phương pháp thu thập:Hàm EXISTS trong cơ sở dữ liệu Oracle

  3. Bool hỗ trợ Oracle SQL

  4. ORA-00906:thiếu dấu ngoặc đơn bên trái

  5. Dấu chấm than trong SQL (Oracle)