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

Gặp phải lỗi SQL:ORA-01843:không phải là tháng hợp lệ

'04/04/2012 13:35 PM' không phải là ngày - nó là một chuỗi.

Oracle sẽ thực hiện một TO_DATE( string_value, format_mask ) trên các ký tự không phải ngày tháng khi chèn chúng vào DATE sử dụng giá trị của NLS_DATE_FORMAT tham số phiên làm mặt nạ định dạng ( lưu ý:đây là tham số phiên và thuộc về máy khách; nó không phải là cài đặt chung ). Nếu ký tự không phải ngày tháng khớp với định dạng này thì nó sẽ hoạt động (và nếu không thì nó sẽ không hoạt động) - tuy nhiên, nếu NLS_DATE_FORMAT đã từng được thay đổi thì nó sẽ ngay lập tức bị hỏng (bất kỳ là một điều khó khăn khi gỡ lỗi vì mã đang hoạt động sẽ không hoạt động nhưng sẽ không có ai thay đổi mã).

Bạn có thể tìm hiểu NLS_DATE_FORMAT hiện tại của mình với truy vấn:

SELECT VALUE
FROM   NLS_SESSION_PARAMETERS
WHERE  PARAMETER = 'NLS_DATE_FORMAT';

Tốt hơn là sử dụng TO_DATE() một cách rõ ràng với mặt nạ định dạng chính xác hoặc sử dụng ký tự ngày ANSI / ISO (tức là DATE '2012-04-04' hoặc TIMESTAMP '2012-04-04 13:35' ).

Bạn có thể làm:

INSERT INTO STORE ( id, opening_time )
  VALUES( 1, TO_DATE( '04/04/2012 13:35', 'DD/MM/YYYY HH24:MI' );

(bạn không cần AM/PM vì thành phần giờ đã có trên đồng hồ 24 giờ)

hoặc

INSERT INTO STORE ( id, opening_time )
  VALUES( 1, TIMESTAMP '2012-04-04 13:35:00' );

(sử dụng ký tự dấu thời gian ANSI / ISO mà Oracle sẽ ngầm chuyển đổi thành ngày tháng)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00907:Thiếu dấu ngoặc phải khi tạo khóa ngoại Oracle 12c

  2. Kế hoạch thực thi Oracle

  3. Cách tìm Lịch sử chờ đợi của phiên Oracle

  4. No usename HR trong Oracle 12c

  5. Thay thế cho chức năng giải mã