2014-01-16 35 views
1

我做了以下內容:如何在Oracle 10g xe中插入日期?

  1. CREATE TABLE BOOK(
          BOOK_ID VARCHAR(4) PRIMARY KEY, 
          ISBN_10 VARCHAR(10), 
          TITLE VARCHAR(50), 
          CATEGORY VARCHAR(25), 
          PRICE DECIMAL(6,2), 
          BINDING VARCHAR(2), 
          PUB_DATE DATE, 
          AUTHOR_ID SMALLINT, 
          PUBLISHER_ID SMALLINT 
         ); 
    

2.

ALTER SESSION SET nls_date_format = 'DD-MM-YYYY HH24:MI:SS'; 

3.

INSERT INTO BOOK 
VALUES('4','123459','INTRODUCTION TO SmallTalk','IT',157.00,'S',**'26-01-1991'**,13,103); 

它給了一個錯誤ORA-01843:不是有效的月份

但是,如果做以下沒有問題:

查詢:

INSERT INTO 
BOOK 
VALUES('4','123459','INTRODUCTION TO Small Talk','IT',157.00,'S','**26-JAN-1991**',13,103); 

任何人都可以解釋,爲什麼?

回答

3

它爲我工作。這意味着你的更改陳述因某種原因不起作用。但是,在使用文字時,在系統上採用特定的日期格式並不是一種好的做法。相反,鑄文字與格式掩碼的插入,如:

INSERT INTO BOOK 
VALUES('4','123459','INTRODUCTION TO Small Talk','IT',157.00,'S', 
     to_date('26-JAN-1991','DD-MON-YYYY'), 13,103); 

(或自己需要的任何格式,文字輸入值)

+0

對於Oracle的默認NLS日期格式是'DD-MON-YYYY',但是@OldProgrammer建議,最好謹慎一面並使用所選日期掩碼來投射日期字符串。如果將代碼遷移或與其他具有不同日期格式默認值的系統共享源代碼,則信任隱式數據值轉換(如字符串最新操作)可能會導致問題。 –

1

這是因爲在你的數據庫,nls_date_time設置爲' DD-MON-RRRR」格式,你可以檢查此使用 select * from V$NLS_PARAMETERS

在此查詢

INSERT INTO BOOK VALUES('4','123459','INTRODUCTION TO SmallTalk','IT',157.00,'S','26-01-1991',13,103);

日期格式是「DD-MM-RRRR」,改變語句

INSERT INTO BOOK VALUES('4','123459','INTRODUCTION TO SmallTalk','IT',157.00,'S',to_date('26-01-1991', 'dd-mm-rrrr'),13,103);

,它也將運行,因爲你現在已經提供的日期格式。

5

您想閱讀手冊中的Datetime Literals部分。替代方案是:

  • 使用文字日期:DATE '1991-01-26'
  • 從字符串轉換:TO_DATE('26-01-1991', 'DD-MM-YYYY')

如果設置NLS_DATE_FORMAT可以省略TO_DATE()的第二個參數而不是完全跳過功能。

參見:Datetime Format Models

0

當您設置

ALTER SESSION SET nls_date_format = 'DD-MM-YYYY HH24:MI:SS'; 

那麼你必須插入這種格式我匹配。即

INSERT INTO BOOK VALUES('4','123459','INTRODUCTION TO SmallTalk','IT',157.00,'S', 
'26-01-1991 00:00:00' 
,13,103); 

但是,更安全的方法是使用日期文字或TO_DATE函數。

-1

你只需要使用

INSERT INTO TABLE_NAME VALUES('07-JAN-96'); 

甲骨文始終以"DD-MMM-YY"格式。您應該將月份寫成月份名稱的前3個字符。

+0

@Tunaki你能解釋一下這個答案是否有效 –