SQL“不是有效月份”

时间:2012-10-21 21:56:43

标签: sql oracle

我在sql中有一个表如下:

CREATE TABLE Reserves(
    sid INTEGER,
    bid INTEGER,
    day DATE,
    PRIMARY KEY (sid, bid, day),
    FOREIGN KEY (sid) REFERENCES Sailors,
    FOREIGN KEY (bid) REFERENCES Boats
);

我想插入其中:

INSERT INTO Reserves VALUES(22, 101, '01-01-1998');

但我收到错误:ORA-01843:不是有效月份

这是一个Oracle数据库。我不确定我的日期格式有什么问题。

5 个答案:

答案 0 :(得分:22)

你想要的并不完全清楚,所以你可以尝试:

  • 对于月 - 日 - 年格式:

    INSERT INTO Reserves VALUES(22, 101, TO_DATE('01-01-1998','MM-DD-YYYY'));

  • 对于日 - 月 - 年格式:

    INSERT INTO Reserves VALUES(22, 101, TO_DATE('01-01-1998','DD-MM-YYYY'));

另外,建议阅读:Oracle functions: TO_DATE

答案 1 :(得分:10)

您可以使用date关键字指定ANSI标准日期字符串:

INSERT INTO Reserves VALUES(22, 101, date '1998-01-01');

在这种情况下,格式为YYYY-MM-DD,或1998年1月1日。

答案 2 :(得分:6)

正如@Jody所提到的,
您可以在INSERT之前执行此代码一次更改会话的默认值:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY';

您可以按照自己喜欢的顺序更改格式。

来源: dba-oracle.com

答案 3 :(得分:0)

试试'1998-01-01'。

我相信oracle的默认日期格式是yyyy-mm-dd。您可以使用alter session set nls_date_format ='mm-dd-yyyy'

更改会话的默认值

请注意,大多数客户都可以将此设置为您永久喜欢的内容

答案 4 :(得分:0)

您还可以尝试以下查询格式:

INSERT INTO Reserves VALUES(22, 101, DATE '01-01-1998');

DATE关键字将以下字符串解释为日期。