2012-10-21 69 views
7

我有一個表中的SQL如下: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分貝。我不確定我的日期格式有什麼問題。

+3

正如你應該總是用一種文化inspecific日期格式(年月日),除非你是explcitly聲明的日期格式的一般規則。 '02-01-2012'可能是2012年1月2日或2012年2月1日,但'20120102'總是** ** 2012年1月2日 – GarethD

回答

21

這不是完全清楚你想要的,所以你可以嘗試:

  • 對於月 - 日 - 年格式:

    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

0

嘗試「1998-01-01」。

我相信oracle的默認日期格式是yyyy-mm-dd。您可以通過使用alter session的設置NLS_DATE_FORMAT =「MM-DD-YYYY」

請記住,大多數客戶讓你將其設置爲任何你喜歡的永久

9

您可以使用date更改默認爲您的會話關鍵字指定的ANSI標準日期字符串:

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

在這種情況下,格式爲YYYY-MM-DD,或者1998年

+0

感謝Bob。我希望有一種方法,我不必使用TO_DATE函數。 – Matt

5

由於@Jody也提到了1月1日,
你可以通過INSERT前一次執行此代碼更改爲會話的默認:

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

你可以改變你喜歡的任何順序格式。

來源:dba-oracle.com

相關問題