【发布时间】:2020-12-23 18:05:58
【问题描述】:
我在 Oracle SQL Developer 中创建了一个表 'USER'。
CREATE TABLE USER(
USER_ID INTEGER NOT NULL,
FIRST_NAME VARCHAR2(50) NOT NULL,
LAST_NAME VARCHAR2(50) NOT NULL,
ID_CODE INTEGER NOT NULL,
DATE_OF_BIRTH TIMESTAMP NOT NULL,
TRAINING_CLUB VARCHAR2(50) NOT NULL,
HAVE_LICENCE NUMBER(1) NOT NULL,
AGE_GROUP VARCHAR2(3) NULL,
SPECIALITY VARCHAR2(100) NOT NULL,
COMMENT VARCHAR2(200) NULL,
CONSTRAINT USER_PK PRIMARY KEY (USER_ID)
);
现在我想在其中插入数据,但它只接受 2000 或更大的日期,当它小于 2000 时,例如'1998-13-07',它显示not a valid month。
INSERT INTO USER(USER_ID, FIRST_NAME, LAST_NAME, ID_CODE, DATE_OF_BIRTH, TRAINING_CLUB, HAVE_LICENCE, AGE_GROUP, SPECIALITY) VALUES (1, 'Mari', 'Mets', 4990713134, '1999-13-07', 'Erki Noole Athletics club', 1, 'U23', 'Sprint, hurdle race' );
INSERT INTO USER(USER_ID, FIRST_NAME, LAST_NAME, ID_CODE, DATE_OF_BIRTH, TRAINING_CLUB, HAVE_LICENCE, AGE_GROUP, SPECIALITY) VALUES (2, 'Meelis', 'Valgepea', 39704230213, '1997-23-04', 'Runningpartner', 1, 'M', 'Middle- ja long distance running');
INSERT INTO USER(USER_ID, FIRST_NAME, LAST_NAME, ID_CODE, DATE_OF_BIRTH, TRAINING_CLUB, HAVE_LICENCE, AGE_GROUP, SPECIALITY) VALUES (3, 'Karina', 'Justinov', 6020330872, '2002-30-03', 'SK Fortis', 1,'U20','Long and high jump');
INSERT INTO USER(USER_ID, FIRST_NAME, LAST_NAME, ID_CODE, DATE_OF_BIRTH, TRAINING_CLUB, HAVE_LICENCE, AGE_GROUP, SPECIALITY) VALUES (4, 'Lewis', 'Kordon', 38711120678, '1987-12-11', 'Niidupargi Athletics club', 1, 'M', 'Shot put');
INSERT INTO USER(USER_ID, FIRST_NAME, LAST_NAME, ID_CODE, DATE_OF_BIRTH, TRAINING_CLUB, HAVE_LICENCE, AGE_GROUP, SPECIALITY) VALUES (5, 'Getter', 'Tihhikov', 49802280417, '1998-28-02', 'Trainingpartner', 1, 'W','Long distance running');
INSERT INTO USER(USER_ID, FIRST_NAME, LAST_NAME, ID_CODE, DATE_OF_BIRTH, TRAINING_CLUB, HAVE_LICENCE, AGE_GROUP, SPECIALITY) VALUES (6, 'Andres', 'Allikvee', 50603212165, '2006-21-03', 'SK Lindon', 1, 'U16', 'Pole vault');
表示将添加第 3 行和第 6 行,并且第 1、2、4、5 行没有有效月份。
【问题讨论】:
-
mysql和oracle是两个完全不同的数据库。哪一个?
-
仅供参考,COMMENT 和 USER 是 oracle 中的保留字。
-
顺便说一句 -
timestamp与date数据类型的不同之处在于它允许您存储小数秒。这对DATE_OF_BIRTH有意义吗?可能不是。因此,最好为该列使用date数据类型。请注意,这并不能直接解决您的问题 - 您可能会出于相同的原因遇到相同的问题(并且使用与 GMB 的时间戳答案中所示相同的解决方法)。 -
参见
timestampliterals - 尽管正如@mathguy 所说,鉴于人类出生通常需要一秒钟以上,因此对于出生日期的小数秒可能过多,因此另请参见dateliterals。 -
另外,如果这是专门针对 SQL Developer,请参阅工具 > 首选项 > 数据库 > NLS 并根据需要设置默认值。
标签: sql oracle datetime oracle-sqldeveloper sql-insert