2008-10-12 2 views

답변

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 오른쪽에 공백이 있으므로 문자열을 일치 시키려면 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

+0

은 현지화에 대한 우려가 있습니까이 방법을 사용하는 경우? to_char (..., 'DAY')는 항상 영어 요일 이름을 반환합니까? –

+0

좋은 지적으로, 제약 조건을 업데이트하여 NLS_DATE_LANGUAGE = ENGLISH로 설정했습니다. 분명히 TO_CHAR (sysdate, 'D')는 1로 코딩 된 날짜가 지역에 따라 다르므로 비슷한 문제가 있습니다. – Plasmer

+1

그냥 제안 : 형식에''fmDAY ''를 사용하면 비교를 간단한 == SUNDAY''로 변경할 수 있습니다. –

1

실제 제약 확실하지,하지만 당신은 기능을 사용할 수 있습니다 정수로 요일을 얻기 위해

TO_CHAR(sysdate, 'D'); 

를, 다음

관련 문제