Подтвердить что ты не робот

MySQL выбирает все строки за последний месяц до (сейчас() - 1 месяц), для сравнительных целей

Мне нужна помощь в написании запроса MySQL, чтобы показать мне строки из прошлого месяца, но не весь месяц, только до и до того же дня, часа и минуты, как сейчас(), но за 1 месяц до этого.

Так, например, если сегодня 5/19 в 5:25 вечера, мне нужно выбирать строки с полуночи с 12:00 до 4:25 часов 4/19 (с того же года, конечно).

Спасибо!

4b9b3361

Ответ 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)"

С этим вы будете получать данные с полуночи данного дня