Sql 无法为sdate添加表约束>;=Oracle中的bdate

Sql 无法为sdate添加表约束>;=Oracle中的bdate,sql,oracle,constraints,Sql,Oracle,Constraints,以下是表架构: create table EMPLOYEE (fname /* Employee's first name */ varchar(15) not null, init /* Employee's middle initial */ char(1), lname /* Employee's last name */ varchar(15) not null, IRD /* Employee's IRD number */ varchar(10) not null primary k

以下是表架构:

create table EMPLOYEE
(fname /* Employee's first name */ varchar(15) not null,
init /* Employee's middle initial */ char(1),
lname /* Employee's last name */ varchar(15) not null,
IRD /* Employee's IRD number */ varchar(10) not null primary key, sex /* Employee's sex */ char(1)
constraint check_sex check (sex in ('f','m','F','M')),
bdate /* Employee's birthdate */ date,
office /* Employee's office */ varchar(5),
reg_org /* The number of the registration office the employee works for */
varchar(10),
sdate /* Starting date in the organization */ date);
那么我认为添加约束是有意义的

alter table employee
add constraint ck_date check (sdate >= bate);
但这给了我一个错误

add constraint ck_date check (sdate >= bdate)
               *
ERROR at line 2:
ORA-02293: cannot validate (SYSTEM.CK_DATE) - check constraint violated
有人知道我哪里出错了吗


更新两列的数据

SQL>从员工中选择bdate、sdate

BDATE     SDATE
--------- ---------
21-JAN-58 22-FEB-10
21-MAY-70 17-MAR-09
09-NOV-47 12-MAY-08
10-OCT-53 15-JUN-09
01-OCT-56 01-OCT-05




问题在于,您的表中可能已经有一些数据,当您尝试创建该约束时,数据库正在尝试验证表中已存储的值。似乎存在一些
sdate
问题在于您的表中可能已经有一些数据,当您尝试创建该约束时,数据库正在尝试验证表中已存储的值。似乎有一些
sdate
@a_horse__,没有名字我已经更新了这个问题,很抱歉输入错误。你能告诉我们完整的4位数年份吗<代码>选择to_char(bdate,'yyyy-mm-dd')作为bdate,to_char(sdate,'yyyy-mm-dd')作为员工的sdate
这些日期列是否有可能定义为
varchar
s?好了。第三行。结案了。我发现了问题,其中一个日期是2047。谢谢guys@a_horse_with_no_name我已经更新了这个问题,很抱歉输入错误。你能给我们显示完整的4位数年份吗<代码>选择to_char(bdate,'yyyy-mm-dd')作为bdate,to_char(sdate,'yyyy-mm-dd')作为员工的sdate
这些日期列是否有可能定义为
varchar
s?好了。第三行。结案了。我发现了问题,其中一个日期是2047。谢谢你们
SQL> select to_char(bdate, 'yyyy-mm-dd') as bdate, to_char(sdate,'yyyy-mm-dd') from employee;

BDATE      TO_CHAR(SD
---------- ----------
1958-01-21 2010-02-22
1970-05-21 2009-03-17
2047-11-09 2008-05-12
1953-10-10 2009-06-15
1956-10-01 2005-10-01
ALTER TABLE employee ADD CONSTRAINT ck_date CHECK (sdate >= bdate) NOVALIDATE;
SELECT TO_CHAR(TO_DATE('01-01-49', 'DD-MM-RR'), 'DD-MM-YYYY') AS year_in_2000,
       TO_CHAR(TO_DATE('01-01-50', 'DD-MM-RR'), 'DD-MM-YYYY') AS year_before_2000 FROM dual;
YEAR_IN_2000 YEAR_BEFORE_2000 ------------ ---------------- 01-01-2049 01-01-1950