다른 테이블의 날짜 범위 내에서 모든 날짜를 개별적으로 가져 오는 방법을 알려줄 수 있습니까?SQL 서버의 두 테이블 내에서 날짜 범위를 루프하는 방법
'포함하지 않음 18 및 19'방법 : 예약 테이블 상태가 '점유'의 사용 가능한 중간 날짜 (18,19)로 계산되지 않도록 저장 프로 시저를 다시 작성하려면 어떻게해야합니까?
내가 예약 테이블에 날짜 범위를 가지고 :
CheckInDate (07/16/2014 12:00:00 AM)
CheckOutDate (07/20/2014 13:00:00 PM)
RoomNumber CheckInDate CheckOutDate Status
204 07/16/2014 12:00:00 AM 07/20/2014 13:00:00 PM Occupied
하지만 내 AvailableTest
테이블에 어떤 날짜 범위가 없다. 모든 기록은 개인 날짜입니다. 그러나 Reservation 테이블에는 개별 날짜가 없습니다. 범위가 있으며 해당 날짜 범위와 나의 개별 날짜가 AvailableTest
표와 어떻게 일치합니까?
RoomNumber CheckInDate CheckOutDate Status
204 07/16/2014 12:00:00 AM 07/16/2014 13:00:00 PM Available
204 07/17/2014 12:00:00 AM 07/17/2014 13:00:00 PM Available
204 07/18/2014 12:00:00 AM 07/18/2014 13:00:00 PM Available
204 07/19/2014 12:00:00 AM 07/19/2014 13:00:00 PM Available
204 07/20/2014 12:00:00 AM 07/20/2014 13:00:00 PM Available
사람이 2014년 7월 24일에 2014년 7월 18일의 범위 내에서 사용 가능한 방을 선택하면
204 07/18/2014 12:00:00 AM 07/18/2014 13:00:00 PM Available
204 07/19/2014 12:00:00 AM 07/19/2014 13:00:00 PM Available
204 07/20/2014 12:00:00 AM 07/20/2014 13:00:00 PM Available
더 이상 사용할 수 없습니다해야하지만 밖으로 쿼리 할 때 그들은 단지
을 꺼내204 07/20/2014 12:00:00 AM 07/20/2014 13:00:00 PM Available
및 18 및 19가 여전히 나와 있습니다.
그들은 단지 checkindate
과 checkoutdate
과 일치하는 것으로 보이므로 18-24 (확인 가능)의 기간 내에 16과 20을 확인합니다. 그들은 18 세와 19 세 또한 몰랐습니다.
는 여기에 당신이 예약 테이블에 행이 없음을 날짜 만의 AvailableTest 테이블에서 행을 얻을 찾고 생각 내 쿼리
select distinct (at.RoomNumber), at.RoomID, '', '', '', '', '', '', at.CheckInDate, at.CheckOutDate
from AvailableTest at
join Room r on r.RoomID = at.RoomID
join Reservations res on res.RoomID =r.RoomID where
((at.CheckInDate between '07/18/2014 13:00:00 PM' and '07/24/2014 12:00:00 AM')
or (at.CheckOutDate between '07/18/2014 13:00:00 PM' and '07/24/2014 12:00:00 AM'))
and at.CheckOutDate not in (SELECT CheckOutDate
FROM reservations rs WHERE ((CheckInDate BETWEEN '07/18/2014 13:00:00 PM' AND '07/24/2014 12:00:00 AM') OR (CheckOutDate BETWEEN '07/18/2014 13:00:00 PM' AND '07/24/2014 12:00:00 AM'))) and at.CheckInDate not in (SELECT CheckInDate FROM reservations rs WHERE ((at.CheckInDate BETWEEN '07/18/2014 13:00:00 PM' AND '07/24/2014 12:00:00 AM') OR (at.CheckOutDate BETWEEN '07/18/2014 13:00:00 PM' AND '07/24/2014 12:00:00 AM')))'
그냥 추측하지만 12 시간 및 24 시간 시계를 섞어 놓은 것처럼 보입니다. 12:00:00 AM 00:00:00입니까? – Ruskin
'AvailableTest' 테이블의 사용법은 무엇입니까? 어떤 데이터를 관리하고 있습니까? –
안녕하세요 Ruskin, 24 시간 범위를 사용합니다. 체크 아웃 시간은 12:00 AM이어야합니다. 따라서 내가 넣는 이유는 –