MySQL выбирает все строки за последний месяц до (сейчас() - 1 месяц), для сравнительных целей
Мне нужна помощь в написании запроса MySQL, чтобы показать мне строки из прошлого месяца, но не весь месяц, только до и до того же дня, часа и минуты, как сейчас(), но за 1 месяц до этого.
Так, например, если сегодня 5/19 в 5:25 вечера, мне нужно выбирать строки с полуночи с 12:00 до 4:25 часов 4/19 (с того же года, конечно).
Спасибо!
Ответы
Ответ 1
Вы можете получить первый месяц, вычислив last_day месяца и добавьте один день. Это неудобно, но я думаю, что лучше форматировать дату как строку и использовать ее для расчета.
select
*
from
yourtable t
where
/* Greater or equal to the start of last month */
t.date >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) and
/* Smaller or equal than one month ago */
t.date <= DATE_SUB(NOW(), INTERVAL 1 MONTH)
Ответ 2
Получение месяца назад легко с помощью одной функции MySQL:
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);
или
SELECT NOW() - INTERVAL 1 MONTH;
Сверху, я не могу придумать элегантный способ получить первый день в прошлом месяце в MySQL, но это, безусловно, будет работать:
SELECT CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01');
Объедините их, и вы получите запрос, который решает вашу проблему:
SELECT *
FROM your_table
WHERE t >= CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01')
AND t <= NOW() - INTERVAL 1 MONTH
Ответ 3
Простой код, пожалуйста, проверьте
SELECT * FROM table_name WHERE created <= (NOW() - INTERVAL 1 MONTH)
Ответ 4
Это пример операции с датой MySQL, относящейся к вашему вопросу:
SELECT DATE_ADD( now( ) , INTERVAL -1 MONTH )
Вышеуказанное вернет дату, месяц назад
Итак, вы можете использовать его, как показано ниже:
SELECT *
FROM your_table
WHERE Your_Date_Column BETWEEN '2011-01-04'
AND DATE_ADD(NOW( ), INTERVAL -1 MONTH )
Ответ 5
SELECT *
FROM table
WHERE date BETWEEN
ADDDATE(LAST_DAY(DATE_SUB(NOW(),INTERVAL 2 MONTH)), INTERVAL 1 DAY)
AND DATE_SUB(NOW(),INTERVAL 1 MONTH);
Смотрите документы для информации о DATE_SUB
, ADDDATE
, LAST_DAY
и других полезных функциях datetime.
Ответ 6
Вы можете использовать предложение WHERE
типа:
WHERE DateColumn BETWEEN
CAST(date_format(date_sub(NOW(), INTERVAL 1 MONTH),'%Y-%m-01') AS date)
AND
date_sub(now(), INTERVAL 1 MONTH)
Ответ 7
SELECT *
FROM table
WHERE myDtate BETWEEN now()
, DATE_SUB(NOW()
, INTERVAL 1 MONTH)
Ответ 8
Мое решение состояло в том, чтобы избежать использования NOW()
при написании sql с вашим языком программирования и заменить на строку. Проблема с NOW()
, как вы указываете, включает текущее время. Поэтому для захвата с начала дня запроса (0 час и минута) вместо:
r.date <= DATE_SUB(NOW(), INTERVAL 99 DAY)
Я сделал (php):
$current_sql_date = date('Y-m-d 00:00:00');
в sql:
$sql_x = "r.date <= DATE_SUB('$current_sql_date', INTERVAL 99 DAY)"
С этим вы будете получать данные с полуночи данного дня