10

我在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: not a valid month

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

4

5 回答 5

27

您想要哪个并不完全清楚,因此您可以尝试:

  • 对于月-日-年格式:

    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 函数:TO_DATE

于 2012-10-21T21:59:08.650 回答
12

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

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

在本例中,格式为 YYYY-MM-DD,即 1998 年 1 月 1 日。

于 2012-10-21T22:21:50.710 回答
8

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

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

您可以按您喜欢的任何顺序更改格式。

资料来源: dba-oracle.com

于 2014-03-01T21:10:34.657 回答
1

试试“1998-01-01”。

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

请记住,大多数客户都允许您将其永久设置为您喜欢的任何内容

于 2012-10-21T22:02:31.703 回答
1

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

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

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

于 2019-07-19T12:12:11.960 回答