我需要创建一个表,其中“ttime
”列的值可以在 10:00
和 22: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: date or system variable wrongly specified in CHECK constraint
如何避免?有什么问题?
最佳答案
要实现这样的约束,您需要从 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)
关于oracle - SQL Developer 中列的检查约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44107709/