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

Chọn nhân viên có ngày sinh trong phạm vi nhất định bằng Oracle SQL

Có nhiều cách để tìm kiếm phạm vi ngày trong Oracle. Đối với tình huống của bạn, tôi khuyên bạn nên chuyển các yếu tố tháng và ngày của tất cả các ngày có liên quan thành số.

select
  p.id as person_id,
   ...
   ...
  where e.active = 1
  and to_number (to_char( e.dateOfBirth, 'MMDD')) 
      between to_number (to_char( FROMDATE, 'MMDD'))
              and to_number (to_char( TODATE, 'MMDD')) 
  order by extract(month from e.dateOfBirth) DESC,
          extract(day from e.dateOfBirth) DESC

Điều này sẽ không sử dụng bất kỳ chỉ mục nào trên e.dateOfBirth cột. Điều đó có quan trọng hay không tùy thuộc vào tần suất bạn muốn chạy truy vấn.

@AdeelAnsari nhận xét:

Chỉ số nào? Chỉ mục bình thường trên dateOfBirth sẽ không có ích gì, bởi vì các mục nhập chỉ mục sẽ dẫn đầu với phần tử năm. Vì vậy, nó sẽ không giúp bạn tìm thấy tất cả hồ sơ của những người sinh trên bất kỳ 23 tháng 12.

Chỉ mục dựa trên hàm - hoặc trong 11g, một cột ảo có chỉ mục (về cơ bản giống nhau) - là cách duy nhất để lập chỉ mục các phần của cột ngày.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Một giản đồ có thể có nhiều người dùng không?

  2. Spring Batch:Không thể tăng danh tính; ngoại lệ lồng nhau là com.microsoft.sqlserver.jdbc.SQLServerException:Tên đối tượng 'BATCH_JOB_SEQ' không hợp lệ?

  3. Chuyển đổi dấu thời gian / ngày giờ từ UTC sang EST Oracle SQL

  4. Kiểu dữ liệu SQL national character (NCHAR) thực sự dùng để làm gì?

  5. Sự khác biệt về cách xử lý khoảng trắng giữa Oracle và SQL Server