SQL检查DATE两次之间的任何一天

Ben*_*rds 3 sql oracle plsql date-arithmetic

我有一个事务表,我的问题是跟踪transactionDateTime列.使用SQL,我似乎无法获取DATETIMESTAMP格式化,以便任何插入的数据必须在任何给定的一天上午8点到晚上10点之间:

    CREATE TABLE Transaction_T
      (transactionID          NUMBER(8,0)              ,
       employeeID             NUMBER(10,0)      NOT NULL,
       customerID             NUMBER(6,0)       NOT NULL,
       transactionDate        VARCHAR2(9)       NOT NULL,
       transactionPayment     VARCHAR2(10) check(transactionPayment IN('cash','credit','debit','ebt')),
       transactionType        VARCHAR2(10) check(transactionType IN('void','return','sale')),
       transactionDateTime    TIMESTAMP check(transactionDateTime < '% 22:00:00' AND transactionDateTime > '% 08:00:00') NOT NULL,
CONSTRAINT TransactionPK PRIMARY KEY (transactionID),
CONSTRAINT TransactionFK1 FOREIGN KEY (employeeID) REFERENCES Employee_T(employeeID),
CONSTRAINT TranscationFK2 FOREIGN KEY (customerID) REFERENCES Customer_T(customerID));
Run Code Online (Sandbox Code Playgroud)

上面的表是创建的,但是在尝试插入正确的时候Date(Time),我会收到1到12小时之间的格式错误,或者当时间低于12时没有有效月份.我使用了Oracle文档格式但仍然没有运气:

INSERT INTO 
transaction_T(transactionID, employeeID, customerID, transactionDate, transactionPayment, transactionType, transactionDateTime) 
VALUES(00000001, 0001, 000004, '04-APR-13','ebt','sale','04-APR-13 13:25:10');
Run Code Online (Sandbox Code Playgroud)

Ed *_*bbs 8

%你的检查约束不会在这里工作.试试这个:

CHECK (
  EXTRACT(HOUR FROM transactionDateTime) < 22 AND
  EXTRACT(HOUR FROM transactionDateTime) >= 8)
Run Code Online (Sandbox Code Playgroud)