我想要一张有雇员姓名和出生年份的表格。只有年份格式:
CREATE TABLE EMPLOYEE(
Name VARCHAR2(50) NOT NULL,
Year_Birth DATE NOT NULL,
PRIMARY KEY (Name)
);
我想这样做:
INSERT INTO EMPLOYEE(Name, Year_Birth)
VALUES ('John Smith', 1985);
但它不起作用(因为我将数字值传递给日期列)。我也试过这个:
INSERT INTO EMPLOYEE(Name, Year_Birth)
VALUES ('John Smith', to_date('1972','YYYY') )
如果我尝试这个,我会得到这个: ORA-02290:违反检查约束(PROJECTNAME.SYS_C0066777818)
Year_Birth必须是日期列。有没有办法实现这个目标?
答案 0 :(得分:2)
我认为出生年应该是INT,就像这样:
CREATE TABLE EMPLOYEE(
Name VARCHAR(50) NOT NULL,
Year_Birth INT NOT NULL,
PRIMARY KEY (Name)
);
然后这应该有效:
INSERT INTO EMPLOYEE(Name, Year_Birth)
VALUES ('John Smith', 1985);
答案 1 :(得分:1)
您可以创建数据类型为 int 的列。这样就可以节省出生年份。
如果列必须是数据类型日期,那么您可以将日期保存为相关年份的1月1日(例如,2017年输入' 20170101' 强>)。这仍然允许您对数据执行日期计算。
答案 2 :(得分:1)
您可以创建一个数据类型为int的列。 insert语句将起作用。
insert into employee(Name, Year_Birth)
values ('John Smith', 1985);
答案 3 :(得分:0)
我假设您的神秘检查约束SYS_C0066777818正在执行year_birth
必须是1月1日的规则。
to_date('1972','YYYY')
并没有像你预期的那样给出1972年1月1日,它在1972年给出当月的第一个月。谁知道为什么,但这就是它的工作方式。如果你想要1972年1月1日那么你必须明确指定它,例如:
insert into employee (name, year_birth)
values ('John Smith', date '1972-01-01');
或等效to_date
表达式,至少包含月份或trunc(somedatevariable,'YEAR')
。