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

Truy vấn SQL sử dụng hai ngày

'10-MAY-20' không phải là một ngày, nó là một chuỗi. Một ngày không có bất kỳ định dạng nào, dựa trên cài đặt NLS dành riêng cho ngôn ngữ của bạn, ngày được hiển thị ở định dạng con người có thể đọc được bằng cách sử dụng TO_CHAR và mặt nạ định dạng thích hợp.

Ngoài ra, bạn nên tránh sử dụng YY có hai chữ số đại diện cho năm, đó là toàn bộ lý do Y2K lỗi bắt đầu. Luôn sử dụng YYYY định dạng.

Để chuyển đổi một chuỗi thành ngày tháng:

Sử dụng TO_DATE và mặt nạ định dạng thích hợp:

where  date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')  
and    date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')

Hoặc, sử dụng ANSI date literal sử dụng định dạng cố định 'YYYY-MM-DD' :

where  date_col > DATE '2020-05-10' and date < DATE '2020-05-13'

Một điều khác, DATE là một từ dành riêng của Oracle, bạn có thể xem tài liệu . Có lẽ, bạn đang sử dụng số nhận dạng được trích dẫn "date" tức là sử dụng dấu ngoặc kép xung quanh từ dành riêng.

Đó có thể là do cài đặt NLS của Nhà phát triển SQL của bạn được đặt thành 'DD-MON-YY' , vì vậy khi bạn chuyển ngày ở định dạng đó, nó không phải là một chuyển đổi ngầm định sang ngày. Tuy nhiên, nếu bạn thay đổi định dạng, nó sẽ không hoạt động:

alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Video:Hiệu suất cột IDENTITY của Oracle 12c trên RAC

  2. Làm cách nào để viết một chính sách trong Oracle SQL hạn chế quyền truy cập của những người không phải là chủ sở hữu đối với một bảng?

  3. Làm thế nào để bạn tìm hiểu về các tính năng không dùng nữa trong bản phát hành mới của Oracle?

  4. Chỉ kích hoạt các giá trị đã thay đổi

  5. Hàm LOCALTIMESTAMP () trong Oracle