2008-10-12 4 views

Répondre

8

Oui, un La contrainte de vérification peut vérifier que le jour de la semaine n'est pas le dimanche. Voici un exemple:

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%'); 

--Il sont des espaces blancs à droite du dimanche ou si semblable rtrim est nécessaire pour correspondre à la chaîne.

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')); 

Lorsque vous essayez d'insérer une date qui est un dimanche, il dira:
ORA-02290: check constraint (SYS.DAY_IS_NOT_SUNDAY) violated

+0

Y at-il des préoccupations au sujet de la localisation lors de l'utilisation de cette méthode? Est-ce que to_char (..., 'DAY') renvoie toujours des noms de jour en anglais? –

+0

Bon point, j'ai mis à jour la contrainte pour mettre NLS_DATE_LANGUAGE = ENGLISH. Apparemment TO_CHAR (sysdate, 'D') a un problème similaire ici parce que la date codée 1 varie selon les régions. – Plasmer

+1

Juste une suggestion: si vous utilisez '' fmDAY'' pour le format, vous pouvez changer la comparaison en simple égalité '= 'SUNDAY''. –

1

pas sûr de la contrainte réelle, mais vous pouvez utiliser la fonction:

TO_CHAR(sysdate, 'D'); 

pour obtenir le jour de la semaine comme un entier, puis faire un petit contrôle sur elle

Questions connexes