【问题标题】:SQL INSERT Calculate NoOfDays Between A DateSQL INSERT 计算日期之间的 NoOfDays
【发布时间】: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 应该是 checkingInOnarrivingOn 等。CheckOutDate 应该是 checkingOutBydepartingBefore 等(并且会可能最好作为“独家”上限)。或者,放弃结帐日期,并存储stayDuration(以整数天或其他形式)。

标签: sql tsql sql-server-2012


【解决方案1】:

更新:

试试这个:

INSERT Reservation(CustomerID,RoomNo,CheckInDate,CheckOutDate,NoOfDays)
    VALUES(1,101,'2012-01-01','2012-01-30',DATEDIFF(day,'2012-01-01','2012-01-30'));

SQL Fiddle

【讨论】:

  • 您好,它可以工作,但是不能根据指定的列(checkindate、checkoutdate)自动生成 noofdays 吗?有没有办法做到这一点?
  • @user1638362 - 检查小提琴,显示修改后的查询。虽然,András,为了完整起见,您可能应该在此处包含声明。
  • @user1638362 :插入后您可以更新它。或者一个 INSERT 触发器可能是那个选项。但不在 INSERT 语句中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2021-01-16
  • 1970-01-01
  • 2021-07-20
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多