我做了以下操作:
-
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 个字符。