You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加日期范围校验约束报错:literal does not match format string

问题解决:Oracle建表CHECK约束日期字面量格式错误

你遇到的literal does not match format string错误,是因为Oracle中使用date '字符串'语法时,字符串格式必须和当前会话的NLS_DATE_FORMAT参数匹配,而你用的01/01/1904格式大概率和默认设置不兼容(Oracle默认常见格式是DD-MON-RR,比如01-JAN-04)。

给你两种可靠的解决方法:

方法1:使用ANSI标准日期字面量(推荐)

ANSI标准的日期格式YYYY-MM-DD不受NLS参数影响,兼容性最强,直接修改CHECK约束里的日期即可:

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

方法2:用TO_DATE函数指定格式

如果坚持要用MM/DD/YYYY格式,就用TO_DATE函数明确指定格式掩码,让Oracle能正确解析:

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', 'MM/DD/YYYY') and 
                                           to_date('01/01/2004', 'MM/DD/YYYY')) not null,
  Address        varchar2(80)      not null
); 

另外提一句,你语句里not null放在CHECK约束后面的写法是没问题的,Oracle会正确识别这个字段非空的要求。

内容的提问来源于stack exchange,提问作者ICARO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:25:53