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

Oracle:không phải là một tháng hợp lệ

1.

To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE

đang gây ra sự cố. khi bạn sử dụng to_date mà không có định dạng thời gian, oracle sẽ sử dụng định dạng NLS phiên hiện tại để chuyển đổi, trong trường hợp của bạn có thể không phải là "DD / MM / YYYY". Kiểm tra cái này ...

SQL> select sysdate from dual;

SYSDATE
---------
26-SEP-12

Which means my session's setting is DD-Mon-YY

SQL> select to_char(sysdate,'MM/DD/YYYY') from dual;

TO_CHAR(SY
----------
09/26/2012


SQL> select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual;
select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual
               *
ERROR at line 1:
ORA-01843: not a valid month

SQL> select to_date(to_char(sysdate,'MM/DD/YYYY'),'MM/DD/YYYY') from dual;

TO_DATE(T
---------
26-SEP-12

2.

Quan trọng hơn, Tại sao bạn chuyển đổi sang char và sau đó cho đến nay, thay vì so sánh trực tiếp

MaxDate = REP_DATE

Nếu bạn muốn bỏ qua thành phần thời gian trong MaxDate trước khi so sánh, bạn nên sử dụng ..

trunc(MaxDate ) = rep_date

thay vào đó.

==Cập nhật:dựa trên câu hỏi được cập nhật.

Rep_Date = 01/04/2009 Rep_Time = 01/01/1753 13:00:00

Tôi nghĩ vấn đề phức tạp hơn. nếu rep_time chỉ là thời gian, thì bạn không thể lưu trữ nó trong cơ sở dữ liệu dưới dạng ngày tháng. Nó sẽ phải là một chuỗi hoặc khoảng thời gian tính theo thời gian hoặc số dưới dạng giây (cảm ơn Alex, hãy xem cái này ). Nếu có thể, tôi khuyên bạn nên sử dụng một cột rep_date có cả ngày và giờ và so sánh trực tiếp với cột ngày tối đa.

Nếu đó là một hệ thống đang chạy và bạn không kiểm soát được ngày thay đổi, bạn có thể thử cách này.

trunc(rep_date) = trunc(maxdate) and 
to_char(rep_date,'HH24:MI:SS') = to_char(maxdate,'HH24:MI:SS')

Dù bằng cách nào, thời gian đang được lưu trữ không chính xác (như bạn có thể biết từ năm 1753) và có thể có các vấn đề khác trong tương lai.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ràng buộc Kiểm tra Oracle

  2. Tôi nên đặt tài nguyên trình cài đặt ở đâu (tệp wxs, dmg-script, biểu tượng) và cách định cấu hình antrun maven khi triển khai ứng dụng độc lập

  3. Truy xuất dữ liệu trong một phạm vi ngày trong Oracle

  4. Có câu lệnh SQL nào sẽ chia những gì sẽ có 2 cột dài thành nhiều cặp cột không?

  5. Oracle:ORA-12154:Vấn đề TNS:Excel 64-bit / Windows 10 64-bit