如何仅检查时间条目以便之前的任何条目都不可接受?
CREATE TABLE demo.event(
ecode CHAR(4) UNIQUE NOT NULL PRIMARY KEY,
edesc VARCHAR(20) NOT NULL,
elocation VARCHAR(20) NOT NULL,
edate DATE NOT NULL
CONSTRAINT date_check CHECK(edate BETWEEN '2016/04/01' AND '2016/04/30'),
etime TIME NOT NULL
CONSTRAINT time_check CHECK(etime (HOUR > '08:00:00')),
emax SMALLINT NOT NULL
CONSTRAINT emax_check CHECK(emax >=1 OR emax<=1000)
);
上面的代码给了我一个错误
错误:列&#34;小时&#34;不存在
答案 0 :(得分:0)
要编写时间字面值,您需要使用关键字time
而不是小时:
CONSTRAINT time_check CHECK(etime > TIME '08:00:00'),
所以在上午9:00之前的任何参赛作品都是不可接受的。
与您使用的08:00:00'
相矛盾,> TIME '08:00:00'
将允许08:00:01
(早上8点后一秒)。如果你真的只想在上午9点之后允许值,那么使用:
CONSTRAINT time_check CHECK(etime > TIME '09:00:00'),
您还应该使用正确的ISO格式日期以避免任何歧义:
CONSTRAINT date_check CHECK(edate BETWEEN DATE '2016-04-01' AND DATE '2016-04-30')
有关日期和时间文字的正确语法的更多详细信息,请参阅手册:
http://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT