我可以在如何创建我的select语句时使用一些建议,因此它将与签入和签出日期一起使用。我有2张桌子:房间和预订。为了帮助您理解,它们看起来像这样:
Rooms table:
Room number (prim-key)
Type
Price
Booking table:
BookingId (prim-key)
Check-In date:
Check-Out date:
Room-number (foreign key) to Room number in Room table.
我有一个Check available room按钮,它在我的gridview中运行select语句。根据用户的输入,它应该找到尚未预留的房间。
登记入住和退房的数据类型为"日期" DD / MM / YYY" 让我们说如果在13-07-2015和15-07-2015之间预订101房间。该表将如下所示。
BookingId = a long number , Check-In = 13-07-2015 , Check-Out = 15-07-2015 , RoomNumber = 101.
那么,如果用户在日期中写道,我如何制作select语句:2015年4月14日也是16-07-2015?然后它不应该显示101室,因为它被保留了。
希望有人可以帮助指导我朝着正确的方向前进。如果您需要任何代码或其他内容,请告诉我们!
更新
我仍然试图让这项工作......不确定是什么导致我得到的问题。现在,当我运行Tim和Hogan的代码(尝试过两者)时,它将检索酒店中的所有房间,而不是对保留的特定房间进行排序。
如下图所示,102号房间已预留
用户在日期中写入的文本框代码:
<div class="form-group">
<asp:Label ID="CheckinLabel" runat="server" Text="Check-in Date"></asp:Label>
<asp:TextBox ID="datetimepicker1" ClientIDMode="Static" runat="server" CSSclass="form-control"></asp:TextBox>
</div>
<div class="form-group">
<asp:Label ID="CheckoutLabel" runat="server" Text="Check-out Date"></asp:Label>
<asp:TextBox ID="datetimepicker2" ClientIDMode="Static" runat="server" CSSclass="form-control"></asp:TextBox>
</div>
我的两张桌子的图片,以便您可以看到它们的样子:
CheckIn和CheckOut数据类型为:nchar(10),已尝试使用&#34; date&#34;数据类型,但它给了我以下错误&#34;从字符串转换日期和/或时间时转换失败。&#34;
重要的是,如果您尝试预订房间并且入住或退房日期是2015年7月15日至2015年7月20日之间的日期,则房间102已经预订,不应该显示。
答案 0 :(得分:4)
<
答案 1 :(得分:2)
我认为Tim错过了一个案例 - 使用Between可能会使逻辑更清晰吗?
编辑:没关系,蒂姆是对的 - 这是另一种方法。
案例 - 我们的签到或结账时间介于房间使用或我们办理登机手续和退房时间之间。#34;环绕&#34;当房间被使用时。
SELECT r.*
FROM Room r
WHERE NOT EXISTS
(
SELECT 1 FROM Booking b
WHERE b.RoomNumber = r.RoomNumber
AND
(
@Checkin BETWEEN b.CheckIn AND b.CheckOut OR
@Checkout BETWEEN b.CheckIn AND b.CheckOut OR
(@Checkin <= b.CheckIn AND @CheckOut >= b.CheckPut
)
)
答案 2 :(得分:0)
CREATE PROCEDURE [dbo].[SP_RoomAvailabilty_Bind]
(
@RTId bigint=null,/*Room Type*/
@CheckInDate DATE=null,/*Checkin Date*/
@CheckOutDate DATE=null/*Checkout Date*/
)
AS
BEGIN
SELECT tbl_RoomMaster.RoomSN, tbl_RoomTypeMaster.RoomType
FROM tbl_RoomMaster INNER JOIN
tbl_RoomTypeMaster ON tbl_RoomMaster.RTId = tbl_RoomTypeMaster.RTId
WHERE tbl_RoomMaster.RoomId NOT IN (SELECT RoomId FROM tbl_Reservation WHERE CheckInDate=@CheckInDate)
AND tbl_RoomMaster.RTId=@RTId
SELECT tbl_RoomTypeMaster.RoomType, tbl_RoomMaster.RoomSN,tbl_RoomMaster.RoomId
FROM tbl_RoomMaster INNER JOIN
tbl_RoomTypeMaster ON tbl_RoomMaster.RTId = tbl_RoomTypeMaster.RTId
WHERE tbl_RoomMaster.RoomId NOT IN (SELECT RoomId FROM tbl_Reservation
WHERE (CheckInDate BETWEEn @CheckInDate AND @CheckOutDate)
OR (CheckoutDate between @CheckInDate AND @CheckOutDate))
END