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

Không phải là tháng hợp lệ trên một câu lệnh INSERT

Trừ khi bạn có trình kích hoạt trên bảng đang đặt ngày hoặc cột dấu thời gian, sẽ cung cấp một số dấu hiệu trong ngăn xếp lỗi đầy đủ, nó giống như NLS_DATE_LANGUAGE của bạn không mong đợi từ viết tắt của tháng bằng tiếng Anh.

Những gì bạn có là hợp lệ bằng tiếng Anh:

alter session set nls_timestamp_format = 'RR/MM/DD HH24:MI:SSXFF';
alter session set nls_date_language ='ENGLISH';

select to_timestamp('15-APR-14 01.36.58.803000000 PM',
  'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;

MY_DATE                   
---------------------------
14/04/15 13:36:58.803000000 

Nhưng nếu ngôn ngữ ngày mặc định trong phiên của bạn là tiếng Ba Lan (phỏng đoán từ hồ sơ của bạn), nó sẽ gây ra lỗi này - với thông báo lỗi vẫn bằng tiếng Anh:

alter session set nls_date_language ='POLISH';

select to_timestamp('15-APR-14 01.36.58.803000000 PM',
  'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;

SQL Error: ORA-01843: not a valid month
01843. 00000 -  "not a valid month"

Nếu bạn không muốn đặt phiên của mình thành tiếng Anh, bạn có thể ghi đè phiên của mình cho một câu lệnh cụ thể bằng cách cung cấp tham số thứ ba tùy chọn cho to_timestamp() :

alter session set nls_date_language ='POLISH';

select to_timestamp('15-APR-14 01.36.58.803000000 PM',
  'DD-MON-RR HH.MI.SS.FF AM',
  'NLS_DATE_LANGUAGE=ENGLISH') as my_date
from dual;

MY_DATE                   
---------------------------
14/04/15 13:36:58.803000000 

Bạn cũng có thể tránh hoàn toàn vấn đề này bằng cách sử dụng số tháng thay vì tên tháng hoặc sử dụng cú pháp theo nghĩa đen của dấu thời gian ANSI:

select timestamp '2014-04-15 13:36:58.803' from dual;

TIMESTAMP'2014-04-1513:36:58.803'
---------------------------------
14/04/15 13:36:58.803000000       

Tất cả các phương pháp này cũng hoạt động cho các cột ngày tháng; to_date() chức năng bị ảnh hưởng bởi cài đặt NLS theo cách giống nhau và có cùng tham số ngôn ngữ ngày tùy chọn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn phân tích SQL Oracle - tổng số hoạt động giống như bảng tính đệ quy

  2. Hàm SYS_GUID () trong Oracle

  3. Cách xuất kết quả truy vấn Oracle sang tệp JSON khi sử dụng SQLcl

  4. Các chức năng phân tích LEAD và LAG

  5. Câu lệnh SQL đã không được đóng đúng cách?