【问题标题】:Query for start and end date查询开始和结束日期
【发布时间】:2013-02-21 15:20:11
【问题描述】:

我已经搜遍了网络,但仍然没有答案。

嗯,我正在创建一个酒店房间预订系统。

我的房间可用性查询适用于这个查询:

SELECT r.roominv_id, r.room_id, m.room_type,r.room_number,r.room_status
            FROM roominventory r
            INNER JOIN room AS m ON m.room_id = r.room_id
            WHERE m.room_type LIKE '%$roomtype%'
            AND r.room_status = 'available'
            AND r.roominv_id NOT IN (SELECT b.roominv_id
                       FROM reserve b
                       WHERE NOT (b.chckout < '$chckin'
                                  OR b.chckin > '$chckout'))

我希望 2 月 2 日作为下午的开始日期(酒店预订必须始终在中午 12 点之后开始),并将 2 月 3 日作为我的结束日期(中午 12 点之前)

但在我当前的查询中,如果我选择 2 月 2 日作为开始日期,选择 2 月 3 日作为结束日期,在数据库中,它将显示为 2 天预订。

所以我的问题是: 我将如何查询客户仍然可以从已预订的房间中选择结束日期?

我实际上看到一个网站有一个日期选择器,有点像 AM/PM http://reservations.directwithhotels.com/reservation/selectDates/148/campaign/ew

但我对 javascript 很陌生。

【问题讨论】:

    标签: sql date


    【解决方案1】:

    根据chckoutchckin 的数据类型,您可能只想使用BETWEEN 运算符,或使用包含相等运算符(&gt;=&lt;=)。

    【讨论】:

      【解决方案2】:

      我认为您只需将where 子句更改为:

      WHERE NOT (b.chckout < '$chckin'
                                    OR b.chckin >= '$chckout')
      

      这假定 chckin 和 chckout 存储为日期。否则,您需要将它们转换为日期,这取决于数据库。 . .这里有一些方法:

      date(b.chckin)
      cast(b.chckin as date)
      trunc(b.chckin)
      

      【讨论】: