oracle 将日期插入表格[重复]

b4qexyjb  于 2023-04-11  发布在  Oracle
关注(0)|答案(2)|浏览(150)

此问题已在此处有答案

SQL "not a valid month"(6个回答)
3天前关闭。
ORA-01843:不是有效月份ORA-06512:at“SYS.DBMS_SQL”,line 1721

CREATE TABLE emp (
    empno NUMBER,
    empname VARCHAR2(255), 
    DOB DATE,
    salary NUMBER, 
    designation VARCHAR2(20)
);

INSERT INTO emp VALUES(100,'John','4.21.1994', 50000,'Manager');

尝试将数据插入表时出错

kiayqfof

kiayqfof1#

你应该对insert语句做两个修改:

  • 在表名后指定所有目标列,并
  • 使用有效的ANSI日期文本作为日期
INSERT INTO emp (empno, empname, DOB, salary, designation)
VALUES
    (100, 'John', date '1994-04-21', 50000, 'Manager');
fdx2calv

fdx2calv2#

您(错误地)依赖于隐式数据转换(从字符串到date),但是- Oracle无法猜测您想要做什么,并且您无法提供Oracle可以识别的格式。
有几个选项可以使用;选择你认为最合适的,只要它是有效的。

SQL> desc temp
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPNAME                                            VARCHAR2(255)
 DOB                                                DATE

使用date literal,它总是有date关键字,后跟yyyy-mm-dd的date:

SQL> insert into temp (empname, dob) values ('John', date '1994-04-21');

1 row created.

使用to_date函数,其格式模型遵循您输入的值:

SQL> insert into temp (empname, dob) values ('Jim' , to_date('4.21.1994', 'mm.dd.yyyy'));

1 row created.

如果您选择使用月份名称,请注意不同的语言!

SQL> insert into temp (empname, dob)
  2  values ('Mike', to_date('apr.21.1994', 'mon.dd.yyyy', 'nls_date_language=english'));

1 row created.

如果你改变session并设置任何格式模型和日期语言,你可以在该格式中插入一个 string(但是,再一次,你不应该依赖于隐式数据类型转换):

SQL> alter session set nls_date_format = 'yyyy-dd-mon';

Session altered.

SQL> alter session set nls_date_language = 'english';

Session altered.

SQL> insert into temp (empname, dob) values ('Jack', '1994-21-apr');

1 row created.

SQL>

相关问题