2011-12-10 92 views
1

我有一个表:SQL操作日期查询,找到之间的日期迄今

rommbookinfo 
(
    hotel_id 
    , room_no 
    , start_date 
    , end_date 
); 

现在,我必须执行一个查询发现房间对于未在预订指定酒店(酒店ID)日期范围(即在DATE1和date2之间)

SELECT * 
FROM tbl_roombook 
WHERE hotel_id = '2' 
    AND start_date NOT BETWEEN 12/17/2011 AND 12/19/2011 
    OR end_date NOT BETWEEN 12/17/2011 AND 12/19/2011 

,但它引发以下错误:

#1064 - You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near 
''SELECT * FROM tbl_roombook WHERE hotel_id='2' AND start_date' at line 1 
+0

你的问题是什么?什么不工作?你期望的输入/输出是什么? – ajreal

+0

@Boruah - 语法错误是因为日期需要在引号中。这并不重要 - 你的查询无论如何不会起作用。 Charles Bretana的解决方案看起来应该起作用。请尝试一下,如果有,请将其标记为“已接受”! – paulsm4

+0

这段代码在哪里被调用,我认为单引号导致你的问题 – Sparky

回答

2

尝试

Select distinct room_no 
    From tbl_roombook rb 
    Where hotel_id = '$h_id' 
    And Not Exists 
     (Select * From tbl_roombook 
     Where hotel_id = rb.Hotel_id 
      And room_No = rb.room_no 
      And start_date <= $date2 
      And end_Date >= $date1) 
+0

喜查尔斯BRETANA,当日期字段为varchar,您的查询将工作 – Bharanikumar

+0

因为@Boruah传递日期像12/17/2011,所以查询认为这是字符串,请澄清它 – Bharanikumar

+0

没有日期,结束日期不为varchar,而他们是在约会甲在表 – Boruah