지난달에 생성 된 데이터베이스의 모든 행을 선택해야합니다.
예를 들어, 현재 월이 1 월이면 12 월에 생성 된 모든 행을 반환하고 2 월이면 1 월에 생성 된 모든 행을 반환하려고합니다. date_created
데이터베이스에 다음 형식으로 생성 된 날짜를 나열 하는 열이 2007-06-05 14:50:17
있습니다..
답변:
SELECT * FROM table
WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
between
경계가 포함되어 있습니다 .. 현재 날짜도 포함됩니다. 어제로 제한되는 이유 / 어떻게 ?? 자세히 설명해주세요.
current_date
오늘날하지만 클라이언트에서 주어진 임의의 날짜 아닌가요?
또 다른 대안이 있습니다. 인덱스 DATE
또는 DATETIME
형식 필드 가 있다고 가정하면 형식이 지정된 날짜가 인덱스가 사용되기 전에 형식이 변환되므로 인덱스를 사용해야합니다. 그러면 EXPLAIN으로 볼 때 range
쿼리가 아닌 index
쿼리가 표시됩니다 .
SELECT
*
FROM
table
WHERE
date_created >= DATE_FORMAT( CURRENT_DATE - INTERVAL 1 MONTH, '%Y/%m/01' )
AND
date_created < DATE_FORMAT( CURRENT_DATE, '%Y/%m/01' )
STR_TO_DATE
주위를 던질 수도 있습니다 DATE_FORMAT
.
다른 방법에 hobodave의 대답
SELECT * FROM table
WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
YEAR_MONTH를 단위로 사용하여 EXTRACT로 동일한 결과를 얻을 수 있으므로 다음과 같이 AND가 필요하지 않습니다.
SELECT * FROM table
WHERE EXTRACT(YEAR_MONTH FROM date_created) = EXTRACT(YEAR_MONTH FROM CURDATE() - INTERVAL
1 MONTH)
YEAR_WEEK
시간 간격 이 없으므로 몇 달이 아닌 몇 주가 필요한 경우 hobodave의 답변으로 돌아 가야합니다.
SELECT *
FROM yourtable
where DATE_FORMAT(date_created, '%Y-%m') = date_format(DATE_SUB(curdate(), INTERVAL 1 month),'%Y-%m')
이것은 지난 30 일 또는 31 일 동안의 기록과는 반대로 지난달의 모든 기록을 반환해야합니다.
이 질문에 대한 답은 이미 선택되었지만 가장 간단한 쿼리는
SELECT *
FROM table
WHERE
date_created BETWEEN (CURRENT_DATE() - INTERVAL 1 MONTH) AND CURRENT_DATE();
select fields FROM table
WHERE date_created LIKE concat(LEFT(DATE_SUB(NOW(), interval 1 month),7),'%');
이것은 필드 값에 변환 함수를 적용하지 않기 때문에 date_created가 인덱싱되면 인덱스를 활용할 수 있습니다.
다음은 지난 달의 레코드를 가져 오는 쿼리입니다.
SELECT *
FROM `tablename`
WHERE `datefiled`
BETWEEN DATE_SUB( DATE( NOW( ) ) , INTERVAL 1
MONTH )
AND
LAST_DAY( DATE_SUB( DATE( NOW( ) ) , INTERVAL 1
MONTH ) )
감사합니다-saqib
SELECT * FROM table
WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
SELECT * FROM table WHERE date_created BETWEEN (CURRENT_DATE() - INTERVAL 1 MONTH) AND CURRENT_DATE();