#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:
Очевидно, что у вас также есть дата где-то в таблице, иначе вы не смогли бы зарезервировать ресурсы. Это приводит к нескольким возможностям.
- Запрашивать как время, так и дату (может быть сложным, но вы можете сделать это udf для повторного использования)
- Используйте DateTime вместо столбцов даты и времени
- если в SQL Server, рассмотрите возможность создания функции CLR для обработки этого, поскольку CLR (.NET-код) будет более эффективно определять «находится во временном диапазоне»
Я уверен, что есть и другие возможности. Ключевым моментом здесь является то, что похоже, что ваш алгоритм дает сбой в основном из-за событий, которые переносятся на другой день. Если это правильно, лучше всего включить день в уравнение. Это может закончиться довольно сложной инструкцией SQL, изменением типов данных (datetime вместо даты и времени) или созданием функции .NET (CLR), помогающей более эффективно определять «находится в диапазоне».
Комментарии:
1. Привет, я знаю, что это немного поздно, спасибо за этот полный ответ, я меняю тип данных на datetime, а затем я смог выполнить все проверки, которые мне требовались, еще раз спасибо.