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

so sánh ngày trong lệnh sql

Không. Ngày / Dấu thời gian không có bất kỳ định dạng nào . Oracle không lưu trữ ngày tháng / dấu thời gian ở định dạng bạn thấy. Định dạng bạn thấy chỉ dành cho hiển thị mục đích. Ngày được lưu trữ nội bộ trong 7 byte, đây là định dạng độc quyền của Oracle .

Tất nhiên bạn có thể. Bạn có thể sử dụng TRUNC sẽ cắt bớt phần thời gian và chỉ để lại phần ngày và kiểu dữ liệu vẫn là ngày.

Ví dụ:

SQL> SELECT TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL;

MY_TMSTMP
----------
2015-05-29

Vì vậy, bạn nhận được đầu vào của người dùng ở định dạng đó dưới dạng chuỗi . Trước tiên, bạn cần chuyển đổi nó vào DATE bằng TO_DATE và sau đó so sánh nó.

Ví dụ:

WHERE TRUNC(dt_column) < TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')

Như tôi đã nói, nếu bạn muốn bỏ qua phần thời gian, hãy áp dụng TRUNC .

Tuy nhiên, việc áp dụng TRUNC vào ngày cột sẽ ngăn chặn bất kỳ chỉ mục thông thường nào trên cột đó. Từ quan điểm hiệu suất, tốt hơn hãy sử dụng Điều kiện phạm vi ngày .

Ví dụ:

WHERE dt_column
BETWEEN 
        TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')
AND     
        TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS') +1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chọn chuỗi con trong oracle?

  2. Hàm ATAN2 () trong Oracle

  3. lấy một cột chữ thường từ ResultSet bằng cách sử dụng tên cột

  4. ORA-01401:giá trị được chèn quá lớn cho cột CHAR

  5. Làm cách nào để lấy dấu thời gian này ở định dạng tôi muốn, Oracle SQL