约束检查时间是否超过上午9点

时间:2015-12-04 18:38:20

标签: sql postgresql-9.2

如何仅检查时间条目以便之前的任何条目都不可接受?

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;不存在

1 个答案:

答案 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