Как сравнить время после даты? - PullRequest
0 голосов
/ 29 мая 2020

Итак, я создаю сервис по продаже билетов в театр, когда кто-то хочет купить билет, клиент увидит список всех доступных спектаклей.

Доступное шоу определяется следующим образом:

  • Шоу не продано
  • Дата не прошла
  • Время не прошло

В бэкенде есть запрос, который выглядит так, чтобы отфильтровать только предстоящие шоу

SELECT * 
FROM shows
WHERE CURRENT_DATE() <= show.date

Этот запрос возвращает сегодняшние шоу и предстоящие шоу, но не фильтрует сегодняшние шоу, для которых прошло время начала. Таким образом, клиент по-прежнему может покупать билеты на уже начавшееся шоу.

То есть: сегодня 29 мая 2020 года и текущее время 21:00:00, шоу, которое мы смотрим, сегодня и начинается в 20:00:00. В существующей системе все еще можно купить билеты на это шоу, но шоу уже началось.

Запросы, подобные этому, не будут работать:

SELECT *
FROM shows
WHERE CURRENT_DATE() <= show.date AND CURRENT_TIME() <= show.time

OR 

SELECT *
FROM shows
WHERE CURRENT_DATE() <= show.date OR CURRENT_TIME() <= show.time

Эти запросы не будут соответствовать указанным выше критериям, потому что первый запрос не вернет никакого шоу по истечении времени

И второй запрос не работает, потому что он также вернет более старые шоу, когда условие времени совпадает.

Есть ли у кого-нибудь идея, как написать запрос, который сначала выбирает все шоу, где дата совпадает с кодификацией, и проверяет, соответствует ли время условию. Что касается предстоящего шоу.

Ответы [ 2 ]

1 голос
/ 29 мая 2020
You can write : CONVERT(date,GETDATE()) or CONVERT(date,CURRENT_DATE()) like this

SELECT *
FROM shows
WHERE CONVERT(date,GETDATE()) <= shows.date 

или

SELECT *
FROM shows
WHERE CONVERT(date,GETDATE()) <= CONVERT(date,shows.date) 
1 голос
/ 29 мая 2020

Что вы можете сделать, так это получить билеты, срок действия которых превышает завтрашнюю дату, отдельно и получить билеты сегодняшнего дня, которые соответствуют условию времени. Так должно работать примерно так:

SELECT *
FROM shows
WHERE DateADD(dd,1,CURRENT_DATE()) <= show.date OR (CURRENT_DATE() = show.date AND CURRENT_TIME() <= show.time)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...