Я получаю данные между временем начала и временем окончания, но что, если время окончания равно нулю? - PullRequest
1 голос
/ 17 октября 2019

У меня есть база данных парковки. Я написал хранимую процедуру, чтобы получить все пустые места с заданной датой и временем. Мой запрос выглядит следующим образом:

 select Count(ParkingSlotId) as 'Empty Spots'
   from [ParkingLot].[ParkingSlot]
  where ParkingSlotId not in
       (select ParkingSlotId
          from [Transaction].[ParkingTransaction]
         where @searchTime between TimeIn and [TimeOut]) 

Этот запрос работает нормально, если значение TimeOut не равно нулю, то есть человек еще не ушел. Как я могу получить эти данные, если TimeOut равен нулю?

1 Ответ

3 голосов
/ 17 октября 2019

Когда TiemOut равно нулю, условие в подзапросе становится следующим:

where  @searchTime between TimeIn and null

Это всегда будет оцениваться как ложное (не меньше, чем null).

Решение будетбыть явно обработать этот случай использования:

select Count(ParkingSlotId) as 'Empty Spots' 
from [ParkingLot].[ParkingSlot] 
where ParkingSlotId not in (
    select ParkingSlotId 
    from [Transaction].[ParkingTransaction] 
    where 
        @searchTime >= TimeIn
        and ([TimeOut] is null or @searchTime <= [TimeOut])
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...