【发布时间】:2012-08-31 14:21:26
【问题描述】:
CREATE TABLE "Reservation"(
ReservationID int IDENTITY (1,1) NOT NULL,
CustomerID int NOT NULL,
RoomNo int NOT NULL,
CheckInDate date NULL,
CheckOutDate date NULL,
NoOfDays int NULL,
CONSTRAINT PK_Reservation PRIMARY KEY(ReservationID),
CONSTRAINT FK_Reservation_Customers_CustID FOREIGN KEY(CustomerID)
REFERENCES dbo.Customers(CustomerID),
CONSTRAINT FK_Reservation_Rooms_RoomNo FOREIGN KEY(RoomNo)
REFERENCES dbo.Rooms(RoomNo)
)
INSERT Reservation(CustomerID,RoomNo,CheckInDate,CheckOutDate,NoOfDays)
VALUES(1,101,'2012-01-01','2012-01-30',DATEDIFF(NoOfDays,'CheckInDate','CheckOutDate'))
谁能告诉我如何计算“CheckInDate”和“CheckOutDate”之间的天数,然后在 NoOfDays 的插入语句中使用这个值。很难解释我希望你理解我在这里想要达到的目标。
【问题讨论】:
-
天数是派生信息,您通常不应该存储这些信息,尤其是考虑到您已经存储签入/签出信息这一事实。不要用类型信息来命名列,通过使用来命名它们:
CheckInDate应该是checkingInOn、arrivingOn等。CheckOutDate应该是checkingOutBy、departingBefore等(并且会可能最好作为“独家”上限)。或者,放弃结帐日期,并存储stayDuration(以整数天或其他形式)。
标签: sql tsql sql-server-2012