предложение where со столбцами времени на sql server

#asp.net #sql #time

#asp.net #sql #время

Вопрос:

В проекте есть функциональность, которая позволяет вам бронировать место в течение дня, они должны ввести день, время начала и время окончания с 7:00 до 12:00 (полночь) или 1:00, например, если кто-то вводит date = 21 / oct / 2011время начала = 8:00 вечера и время окончания 12:00 утра (он бронирует место с 8:00 вечера до 12:00 утра) веб-форма отправляет в процедуру хранения 20:00 и 00:00, чтобы проверить таблицу, чтобы узнать, доступна ли она, если кто-то уже забронировал вв тот же день до полуночи это хранилище выглядит следующим образом startime= 23:00 endtime = 00:00

поэтому, когда я проверяю нового клиента, он должен возвращать, что в диапазоне времени уже есть резервирование, мой запрос неэффективен, но он работает в диапазоне от 7:00 до 23:00, он терпит неудачу, когда из webfrom вводится время окончания 12 часов утра (00:00 в sql), потому чтовремя начала больше времени окончания

это мой запрос

 select COUNT(*)
    from table1
    where id_place=@id_place
    and date=@date  
       and (
           (@start_time=res_start_time and @end_time=res_end_time)
        or (@start_time > res_start_time and @start_time < res_end_time)
        or (@end_time > res_start_time and res_end_time < res_end_time)
        or (res_start_time > @start_time and res_start_time < @end_time)
        or (res_end_time > @start_time and res_end_time < @end_time)
        or (res_start_time < @start_time and res_end_time >@end_time)
          )     


    -- @start_time  = start time of the reservations (from webform)
    -- @end_time    = end time of the reservations (from webform)

    -- res_start_time= represents the start time column
    -- res_ebd_time= represents the end time column
  

мне нужна помощь в двух вещах: как я решил проблему, когда мне нужно проверять время, например, 12:00 или 1:00, которые уже есть в таблице, как в примере в начале вопроса, и проверить мой запрос, потому что я думаю, что должно быть лучшее решение для реализациитакая функциональность

Комментарии:

1. Я читал это пару раз, и я не уверен, в чем вопрос. На что бы вы хотели, чтобы мы посмотрели?

2. В качестве фактического исправления вам, вероятно, следует реструктурировать вашу таблицу, чтобы использовать datetime вместо просто значения времени. Тогда было бы тривиально проверить.

3. Почему в вашем запросе отсутствует дата? Предположительно, вам нужно проверить, конфликтует ли резервирование с бронированием в тот же день?

4. там я забыл его поместить

Ответ №1:

Очевидно, что у вас также есть дата где-то в таблице, иначе вы не смогли бы зарезервировать ресурсы. Это приводит к нескольким возможностям.

  1. Запрашивать как время, так и дату (может быть сложным, но вы можете сделать это udf для повторного использования)
  2. Используйте DateTime вместо столбцов даты и времени
  3. если в SQL Server, рассмотрите возможность создания функции CLR для обработки этого, поскольку CLR (.NET-код) будет более эффективно определять «находится во временном диапазоне»

Я уверен, что есть и другие возможности. Ключевым моментом здесь является то, что похоже, что ваш алгоритм дает сбой в основном из-за событий, которые переносятся на другой день. Если это правильно, лучше всего включить день в уравнение. Это может закончиться довольно сложной инструкцией SQL, изменением типов данных (datetime вместо даты и времени) или созданием функции .NET (CLR), помогающей более эффективно определять «находится в диапазоне».

Комментарии:

1. Привет, я знаю, что это немного поздно, спасибо за этот полный ответ, я меняю тип данных на datetime, а затем я смог выполнить все проверки, которые мне требовались, еще раз спасибо.