如何在甲骨文 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
              );
    

阿拉伯数字。

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);

谁能解释为什么?

您要阅读手册的日期时间文本部分。替代方案是:

  • 使用日期文本:DATE '1991-01-26'
  • 从字符串转换:TO_DATE('26-01-1991', 'DD-MM-YYYY')

如果设置NLS_DATE_FORMAT则可以省略TO_DATE() 的第二个参数,但不能完全跳过该函数。

另请参阅:日期时间格式模型

它对我有用。 这意味着您的 alter 语句由于某种原因不起作用。但是,使用文本时,在系统上采用特定的日期格式并不是好的做法。 相反,在插入项上使用格式掩码强制转换文本,例如:

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

(或您需要的任何格式作为文字输入值)

这是因为在您的数据库中,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);

并且它也将运行,因为您现在已经提供了日期格式。

当您设置

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函数。

你只需要使用

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

甲骨文始终采用"DD-MMM-YY"格式。您应该将月份写为月份名称的前 3 个字符。

最新更新