约束检查时间是否大于上午 9 点

Constraint to check if time greater than 9 am

如何只检查时间条目,以便不接受之前的任何条目?

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

上面的代码报错了

ERROR: column "hour" does not exist

要写时间文字,您需要使用关键字 time 而不是小时:

CONSTRAINT time_check CHECK(etime > TIME '08:00:00'),

so any entry before 9:00 am not acceptable.

与您使用的 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