我正在尝试从包含日期列的.xlsx电子表格中导入数据。在这些列中,日期以DD-MON-YY格式显示(例如:20-AUG-12)。
运行导入向导时,一切正常,直到必须精确调整列/字段映射。我有一个免责声明,说所选格式与表字段定义不匹配(我的字段是日期字段)。插入脚本的示例:
INSERT INTO simulation (simulation_id, simulation_name, sim_start_date, sim_end_date, status, last_run_date, moddat, modusr, notification_email) VALUES (251.0, 'Proposal Test', To_date('01-DEC-11', 'DD-MON-YY'), To_date('31-DEC-11', 'DD-MON-YY'), 'C', To_date('09-AUG-12', 'DD-MON-YY'), To_date('09-AUG-12', 'DD-MON-YY'), 'Brent Weintz', 'bweintz@carlsonwagonlit.com');
当我尝试运行此查询时,出现以下错误:
ORA-01843:无效月份01843。00000-“无效月份”
如您所见,格式是匹配的,我不知道问题出在哪里…有想法的人吗?
编辑:我的日期语言参数设置为“法语”。我可以将其更改为“ AMERICAN”吗?
尽管您正在使用to_date正确的格式模型来将其显式转换为日期,但仍然ORA-01843似乎出现了问题NLS_DATE_LANGUAGE。在这里阅读更多有关它的信息。
to_date
ORA-01843
NLS_DATE_LANGUAGE
SQL> DROP TABLE t PURGE; Table dropped. SQL> CREATE TABLE t(A DATE); Table created. SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='FRENCH'; Session altered. SQL> SELECT * FROM nls_session_parameters WHERE parameter = 'NLS_DATE_LANGUAGE'; PARAMETER VALUE -------------------- ---------- NLS_DATE_LANGUAGE FRENCH SQL> INSERT INTO t VALUES(to_date('01-jan-2012','dd-mon-yyyy')); INSERT INTO t VALUES(to_date('01-jan-2012','dd-mon-yyyy')) * ERROR at line 1: ORA-01843: not a valid month
所以,我遇到了错误的 NLS_DATE_LANGUAGE 错误。让我们将其设置为 AMERICAN 。
SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN'; Session altered. SQL> SELECT * FROM nls_session_parameters WHERE parameter = 'NLS_DATE_LANGUAGE'; PARAMETER VALUE -------------------- ---------- NLS_DATE_LANGUAGE AMERICAN SQL> INSERT INTO t VALUES(to_date('01-jan-2012','dd-mon-yyyy')); 1 row created. SQL>
更新 至OP的已编辑问题-
我的日期语言参数设置为“法语”。我可以将其更改为“ AMERICAN”吗?
从文档开始, 以下是设置NLS参数的方法。 注意优先顺序。