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

Literal không khớp với chuỗi định dạng cho Oracle SQL to_date trên một cột chuỗi

Thứ tự mà Oracle đánh giá các điều kiện được tìm thấy trong mệnh đề where không được cố định. Điều đó có nghĩa là nó có thể chọn đánh giá điều kiện chứa TO_DATE trước các tiêu chí khác, trong trường hợp đó truy vấn sẽ không thành công. Để tránh điều đó, hãy thêm gợi ý Order_predicates vào truy vấn của bạn, nhưng lưu ý rằng điều này có thể yêu cầu điều chỉnh thủ công bổ sung để cải thiện hiệu suất.

SELECT /*+ ordered_predicates */
               To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') somedate 
          FROM properties$aud a, 
               template_properties$aud b, 
               consumable_properties$aud c 
         WHERE Lower(a.name) = 'somedate' 
           AND a.id = b.property_id 
           AND b.id = c.template_property_id 
           AND To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') IS NOT NULL

Rõ ràng là ordered_predicates không được dùng nữa bắt đầu bằng 10g. Trong trường hợp đó, tôi nghĩ lựa chọn duy nhất của bạn là sử dụng truy vấn phụ theo cách mà trình tối ưu hóa buộc phải đánh giá nó trước (tức là nó không thể kết hợp các truy vấn). Cách dễ nhất để làm điều này là đặt rownum trong câu lệnh where của truy vấn bên trong.

SELECT To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') somedate 
  FROM (SELECT value 
          FROM properties$aud a, 
               template_properties$aud b, 
               consumable_properties$aud c 
         WHERE Lower(a.name) = 'somedate' 
           AND a.id = b.property_id 
           AND b.id = c.template_property_id
           AND rownum > 0) 
 WHERE To_Date(c.Value, 'MM/DD/YYYY HH24:MI:SS') IS NOT NULL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có được phép sử dụng một SELECT bên trong một hàm bảng PL / SQL có kết cấu không?

  2. ORA-01756:chuỗi được trích dẫn không được kết thúc đúng cách khi tôi cố gắng thực thi mã của mình

  3. Mô hình hóa dữ liệu cho EAV

  4. Buộc phân biệt chữ hoa chữ thường của mã định danh trong oracle

  5. Chúng ta có thể cập nhật các giá trị khóa chính của một bảng không?