#mysql #sql #date #datetime #where-clause
#mysql #sql #Дата #datetime #where-предложение
Вопрос:
У меня есть запрос следующим образом:
SELECT * FROM tbl_invoice_header
WHERE Create_Date BETWEEN '2019-04-01' AND '2020-03-31'
AND Auth_Settle_Date >'2020-03-31';
Я хочу получить все данные между диапазоном дат, но это было решено после 2020-03-31
Он возвращает мне строку, в которой Auth_Settle_Date=2020-03-31 14:24:36
Auth_Settle_Date — это столбцы даты и времени, поэтому я предполагаю, что именно поэтому он возвращается
Что, я думаю, правильно, как и после 2020-03-31, но не та функциональность, которую я искал
На основе предыдущих комментариев, если я использую: ГДЕ Create_Date МЕЖДУ ‘2019-04-01’ И ‘2020-03-31’ И Auth_Settle_Date> ‘2020-03-31’ ;
Если я использую: ГДЕ create_date >= ‘2019-03-01’ И create_date <‘2020-04-01’ И auth_settle_date >= ‘2020-04-01’
или
ГДЕ create_date >= ‘2019-03-01’ И create_date <‘2020-04-01’ И auth_settle_date >= ‘2020-03-31’ ИНТЕРВАЛ 1 ДЕНЬ
где, как представляется, фактический правильный запрос:
ГДЕ Create_Date МЕЖДУ ‘2019-04-01’ И ‘2020-03-31’ И Auth_Settle_Date >= ‘2020-04-01’
Так что, я думаю, кажется, мне придется добавить день вне запроса к дате to, прежде чем я передам его в запрос, просто кажется странным
Ответ №1:
Это единственный способ получить функциональность для добавления 1 дня к указанной дате
Да, это правильный способ сделать это. Я бы также рекомендовал использовать полуоткрытые интервалы create_date
, если у него также есть временная часть:
where create_date >= '2019-03-01'
and create_date < '2020-04-01'
and auth_settle_date >= '2020-04-01'
Примечание: я полагаю, что вы имели '2019-03-01'
в виду, а не '2019-04-01'
как нижнюю границу create_date
интервала (в противном случае запрос несколько бессмыслен).
Если даты поступают извне вашего кода в качестве параметров запроса, вы можете добавить 1 день непосредственно в запрос:
where create_date >= :start_date
and create_date < :end_date interval 1 day
and auth_settle_date >= :end_date interval 1 day
Ответ №2:
вы можете использовать INtervall
для этого
SELECT * FROM tbl_invoice_header
WHERE Create_Date BETWEEN '2019-04-01' AND '2020-03-31'
AND Auth_Settle_Date > '2020-03-31' INTERVAL 1 DAY;