-1

私はこのテーブルを持っていますTable1:

Room - StartDate - EndDate
1    - 01/01/2013  05/01/2013
1    - 14/01/2013  15/01/2013
2    - 10/01/2013  13/01/2013

2013 年 2 月 1 日から 2013 年 3 月 1 日までに利用可能なすべての「部屋」を表示したい

私が使う:

select * 
from Table1 
where ('02/01/2013' NOT BETWEEN table1.stardate AND table1.enddate) 
   OR ('03/01/2013' NOT BETWEEN table1.startdate AND table1.enddate)

しかし、クエリ結果には 2 (これは正しい)が表示されますが、最後のレコードのために 1 も表示されます。

「Room 2」だけを表示するにはどうすればよいですか?

どうも

4

3 に答える 3

2

用の別のテーブルが既にあると思いますRooms

したがって、Table1Reservationsテーブルの場合:

SELECT  r.* 
FROM    Rooms AS r
WHERE   NOT EXISTS
        ( SELECT    *
          FROM      Table1 AS res
          WHERE     res.Room = rooms.RoomID
            AND     '20120102' < res.EndDate 
            AND     res.StartDate < '20120103' 
        ) ;
于 2013-05-25T08:33:28.933 に答える
0

これを試して

Select * from Table1 

where(stardate >='02/01/2013' and enddate <= '03/01/2013')
于 2013-05-25T10:46:43.497 に答える
0

enddate が常に > startdate である場合は、次のように変更ORします。AND

select * 
from   Table1
where  ('02/01/2013' NOT BETWEEN table1.startdate AND table1.enddate)
AND    ('03/01/2013' NOT BETWEEN table1.startdate AND table1.enddate)
于 2013-05-25T08:23:04.550 に答える