oracle 添加最小和最大日期并得到错误:文字与格式字符串不匹配

zzoitvuj  于 2022-11-22  发布在  Oracle
关注(0)|答案(3)|浏览(139)

我正在尝试创建一个用于预订的表,并希望有一个检查约束,其中客户只能插入从某个年份到另一个年份的D.O.B,但不断收到相同的错误消息
任何帮助都将不胜感激
`

create table guest
( Guest_ID      varchar2(8)       primary key, 
 Family_Name    varchar2(20)      not null,
 Given_Name     varchar2(20)      not null,
 Date_of_Birth  date              check (Date_of_Birth between date '01/01/1904' and 
                                         date '01/01/2004' ) not null,
 Address        varchar2(80)      not null
);

`

hts6caw3

hts6caw31#

请使用下列程式码:

create table guest
( Guest_ID      varchar2(8)       primary key, 
 Family_Name    varchar2(20)      not null,
 Given_Name     varchar2(20)      not null,
 Date_of_Birth  date              check (Date_of_Birth between to_date('01/01/1904','DD/MM/YYYY') and 
                                         to_date('01/01/2004','DD/MM/YYYY')) not null,
 Address        varchar2(80)      not null
);
3htmauhk

3htmauhk2#

jarlh(comments)中的提示起作用了。问题可能是您的日期格式。

create table guest
(Guest_ID      varchar2(8)       primary key, 
 Family_Name    varchar2(20)      not null,
 Given_Name     varchar2(20)      not null,
 Date_of_Birth  date              check (Date_of_Birth between date '1904- 
                                  01- 01' and date '2004-01-01' ) not null,
 Address        varchar2(80)      not null
 ); 

insert into guest values ('t','t','t','18-NOV-03','t')

工作正常。
Fiddle

dffbzjpn

dffbzjpn3#

我会简化这个问题,更喜欢EXTRACT,因为您不关心日期,而只想检查年份范围...

...CHECK (EXTRACT(YEAR FROM Date_of_Birth) BETWEEN 1904 and 2003 )...

...除非您也必须接受2004年1月1日为有效日期。

相关问题