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: 有効な月ではありません

これは 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 も述べたように、
このコードを前に 1 回実行することで、セッションのデフォルトを変更できますINSERT

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

形式は任意の順序で変更できます。

ソース: dba-oracle.com

于 2014-03-01T21:10:34.657 に答える
1

「1998-01-01」を試してください。

オラクルのデフォルトの日付形式は yyyy-mm-dd だと思います。alter session set nls_date_format='mm-dd-yyyy' を使用して、セッションのデフォルトを変更できます。

ほとんどのクライアントでは、これを好きなように永続的に設定できることに注意してください

于 2012-10-21T22:02:31.703 に答える