约束检查时间是否大于上午 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
如何只检查时间条目,以便不接受之前的任何条目?
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