3

我需要创建一个表,其中列“ ttime”的值可以在 和 的范围10:0022:00。这里的代码:

create table test (    
  ttime date,
  CONSTRAINT CHECK_ttime CHECK(ttime >= TO_DATE('10:00', 'HH24:MI') AND
                               ttime <= TO_DATE('22:00', 'HH24:MI'))
);

但是当我创建这个表时,会发生错误:

ORA-02436: 在 CHECK 约束中错误地指定了日期或系统变量

我怎样才能避免它?有什么问题?

4

1 回答 1

3

要强制执行这样的约束,您需要从ttime列中提取时间。当您将日期的时间部分(此处表示为字符串文字'10:00')转换为DATE数据类型的值时,日期部分默认为当前月份和年份的第一天,因此TO_DATE('10:00', 'HH24:MI')将导致01/05/2017 10:00:00您的条件变为

ttime >= 01/05/2017 10:00:00 and  ttime <= 01/05/2017 22:00:00 

注意:AND应替换为OR. ttime不能小于某个值,同时又大于相同的值。

话虽如此,作为选项之一,您可以按如下方式定义约束:

constraint t1_chk01 check (to_number(to_char(c1, 'HH24MI')) 
                           between 1000 and 2200)
于 2017-05-22T08:23:41.960 回答