是否可以使用 CHECK 约束来防止任何日期落在星期日?我不想使用触发器。
Sajee
问问题
761 次
2 回答
8
是的,检查约束可以检查星期几不是星期日。这是一个例子:
create table date_test (entry_date date);
alter table date_test add constraint day_is_not_sunday
check ( to_char(entry_date,'DAY','NLS_DATE_LANGUAGE = ENGLISH') not like 'SUNDAY%');
-- SUNDAY 右边有空格,所以需要 like 或 rtrim 来匹配字符串。
insert into date_test values(to_date('2008-10-12','YYYY-MM-DD')); --Sunday
insert into date_test values(to_date('2008-10-11','YYYY-MM-DD'));
insert into date_test values(to_date('2008-10-10','YYYY-MM-DD'));
insert into date_test values(to_date('2008-10-09','YYYY-MM-DD'));
insert into date_test values(to_date('2008-10-08','YYYY-MM-DD'));
insert into date_test values(to_date('2008-10-07','YYYY-MM-DD'));
insert into date_test values(to_date('2008-10-06','YYYY-MM-DD'));
当您尝试插入星期天的日期时,它会说:
ORA-02290: check constraint (SYS.DAY_IS_NOT_SUNDAY) violated
于 2008-10-12T22:05:51.550 回答
1
不确定实际的约束,但您可以使用该功能:
TO_CHAR(sysdate, 'D');
以整数形式获取星期几,然后对其进行小检查
于 2008-10-12T22:03:00.077 回答