无法将日期数据插入Oracle表中。

3

无法将日期数据插入到Oracle表中。请查找以下查询和错误信息:

查询语句:

INSERT INTO TEST.SUPPLIER
(SUPPLIER_ID, SUPPLIER_NAME, CONTACT_NAME, DOB)
VALUES(6, 'rr', 'ss','2019-06-19');

错误:

SQL 错误 [1843] [22008]: ORA-01843: 月份无效 VALUES(6, 'rr', 'ss','2019-06-19'),错误信息 = ORA-01843: 月份无效 ORA-01843: 月份无效

3个回答

6
请尝试以下查询:
INSERT INTO TEST.SUPPLIER (SUPPLIER_ID, SUPPLIER_NAME, CONTACT_NAME, DOB) VALUES(6, 'rr', 'ss',DATE '2019-06-19');**
< p > DATE 关键字将以下字符串解释为日期。


1
非常好的答案!始终使用日期常量DATE 'yyyy-mm-dd'。它每次都有效,不受日期格式设置的影响 :) - Ed Gibbs
同意,由于某种奇怪的原因,在Oracle中编写日期字面量的正确语法甚至在经验丰富的开发人员中也不是广为人知的。 - William Robertson

1
  • 我确定您在定义表格时使用了DOB作为日期。
  • 您可以直接以DD/MON/YYYY格式输入日期,其中MON为月份的前三个字母。
  • 要将日期格式化为YYYY-MM-DD格式,您可以在字符串前使用DATE,看起来像DATE '2019-07-20'

以下是所有要点的快速介绍


create table supplier(SUPPLIER_ID number, SUPPLIER_NAME varchar2(20), CONTACT_NAME varchar2(20), DOB date);

insert into supplier values(12, 'supplier1', 'contact1', <b>'18/JAN/2019'</b>);
insert into supplier values(13, 'supplier2', 'contact2', <b>date '2019-07-20'</b>);

select * from supplier;

SUPPLIER_ID SUPPLIER_NAME        CONTACT_NAME         DOB
----------- -------------------- -------------------- ---------
         12 supplier1            contact1             18-JAN-19
         13 supplier2            contact2             20-JUL-19

希望它能排序!

双星号在代码段内不起作用,无法将其转换为粗体。(此外,尾随的反引号出现了,据说是为了使**粗体**生效?) - ShinTakezou
“您不能直接以DD/MON/YYYY格式输入日期”。虽然在您的计算机上可能有效,但在我的计算机上肯定无法工作。被识别的格式是由连接到Oracle服务器的客户端应用程序的区域设置定义的,而不是由服务器定义的,也没有适用于所有安装的“通用”格式。ISO格式(date '...')或显式的to_char()调用(使用月份数字而不是名称)是指定日期值的唯一安全方式。 - user330315
@ShinTakezou 这是加粗以突出显示并不在函数中使用的。谢谢。 - Rajit Satija
@a_horse_with_no_name 谢谢分享。已经注意到了。对我有用。 - Rajit Satija

0

你需要将日期字符串转换为DATE类型。在插入值之前进行转换。

INSERT INTO TEST.SUPPLIER (SUPPLIER_ID, SUPPLIER_NAME, CONTACT_NAME, DOB) 
VALUES(6, 'rr', 'ss',TO_DATE('2003/05/03', 'yyyy/mm/dd'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接