IT Share you

MySQL은 비교 목적으로 지난달부터 (now ()-1 개월)까지 모든 행을 선택합니다.

shareyou 2020. 11. 22. 20:51
반응형

MySQL은 비교 목적으로 지난달부터 (now ()-1 개월)까지 모든 행을 선택합니다.


지난 달의 행을 표시하기 위해 MySQL 쿼리를 작성하는 데 도움이 필요하지만 한 달 전체가 아니라 now ()와 같은 날, 시간 및 분까지만 표시하고 1 개월 전입니다.

예를 들어, 오늘이 5 월 19 일 오후 5시 25 분이면 4 월 19 일 자정 12 시부 터 오후 5시 25 분까지 (물론 같은 해부 터) 행을 선택해야합니다.

감사!


전월의 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)

하나의 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

간단한 코드를 확인하세요

SELECT * FROM table_name WHERE created <= (NOW() - INTERVAL 1 MONTH)

다음은 질문과 관련된 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 )

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및 기타 유용한 날짜 기능을 제공합니다.


다음 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)

SELECT *
FROM table
WHERE myDtate BETWEEN now()
    , DATE_SUB(NOW()
    , INTERVAL 1 MONTH)

내 해결책은 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)"

이를 통해 주어진 날짜의 자정부터 데이터를 검색합니다.

참고URL : https://stackoverflow.com/questions/6064687/mysql-select-all-rows-from-last-month-until-now-1-month-for-comparative-p

반응형