MYSQL Как выбрать строки между предыдущим и следующим часами? - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь выполнить запрос в MYSQL, выбирая заказы, где дата created_at находится между предыдущими 3:00 утра и следующими 3:00 утра.

Для пример: если я сделаю этот запрос на 2020-03-31 11:00:00, он должен показать мне все ордера, где отметка времени created_at находится между 2020-03-31 03:00:00 и 2020-04-01 03:00:00.

Я пытался сделать это с помощью этот запрос:

select * 
from "orders" 
where "created_at" BETWEEN cast(curdate() as datetime) + interval 3 hour 
                        and cast(curdate() as datetime) + interval 1 day + interval 3 hour

, но это не работает правильно, потому что, если я выполню этот запрос между 0:00 и 3:00 утра (например, в 2020-03-31 00:30:00), он не будет отображаться что угодно, но это должно показать мне все порядки, где отметка времени created_at находится между 2020-03-30 03:00:00 и 2020-03-31 03:00:00.

Есть идеи, как это сделать? Я пытался найти решение в течение 2 часов, и я не смог найти правильный запрос для этого.

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Тогда вы могли бы сделать

select ...
where `created_at` BETWEEN DATE_SUB(concat(CURDATE(), ' 03:00:00'), INTERVAL 1 DAY) 
                    AND concat(CURDATE(), ' 03:00:00');
0 голосов
/ 31 марта 2020

Я бы сделал:

created at >= date(now()- interval 3 hour) + interval 3 hour
and created_at < date(now()- interval 3 hour) + interval 3 hour + interval 1 day

Лог c должен сместить текущую дату и время на 3 часа, удалить компонент времени, а затем добавить 3 часа.

...