728x90

 

개요

SQL을 사용하다 보면 특정 연도에 해당하는 데이터를 조회하는 일이 자주 발생합니다. 예를 들어, 매월 데이터를 추출하거나, 특정 연도에 대한 분석을 진행할 때 이러한 조회가 필요합니다.

 

날짜 데이터를 다룰 때, DATE_FORMAT(), YEAR(), MONTH() 등의 함수와 BETWEEN 연산자, STR_TO_DATE()와 같은 함수들을 활용하면 원하는 데이터를 손쉽게 필터링할 수 있습니다.

 

본 포스팅에서는 특정 년도와 월에 해당하는 데이터를 조회하는 여러 가지 방법을 정리하고자 합니다.

 

DATE_FORMAT()

년-월 포맷으로 비교

-- 연도만 비교
SELECT * FROM 테이블명
WHERE DATE_FORMAT(날짜컬럼, '%Y') = '2022';


-- 년월 비교
SELECT * FROM 테이블명
WHERE DATE_FORMAT(날짜컬럼, '%Y%m') = '202210';

 

DATE_FORMAT()을 사용하여 YYYY-MM 형식으로 날짜를 포맷한 뒤, 2022년 10월에 해당하는 데이터를 조회할 수 있습니다.

 

주의 사항 ❗️

DATE_FORMAT()함수
는 내부적으로 문자열로 처리되기 때문에 성능이 중요한 대규모 데이터베이스에서는 효율성이 떨어질 수 있습니다.

 

YEAR() & MONTH()

연도와 월로 분리하여 비교

SELECT * FROM 테이블명
WHERE YEAR(날짜컬럼) = 2022 AND MONTH(날짜컬럼) = 10;

 

YEAR() 함수연도를, MONTH() 함수을 추출하여 비교하는 방법입니다.

 

BETWEEN 연산자

범위 지정

SELECT * FROM 테이블명
WHERE 날짜컬럼 BETWEEN '2022-10-01' AND '2022-10-31';

 

BETWEEN 연산자를 사용하여 날짜 범위를 2022-10-01부터 2022-10-31까지 지정하는 방법입니다.

 

DATE 타입

부분 문자열 비교

SELECT * FROM 테이블명
WHERE DATE_FORMAT(날짜컬럼, '%Y-%m') LIKE '2022-10';

 

LIKE 연산자를 사용하여 YYYY-MM 형식의 문자열로 비교하는 방법입니다. 이 방법은 날짜 컬럼이 VARCHAR 또는 CHAR 타입일 때 유용할 수 있습니다.

 

YEAR() + MONTH()

연도와 월을 문자열로 연결

SELECT * FROM 테이블명
WHERE CONCAT(YEAR(날짜컬럼), LPAD(MONTH(날짜컬럼), 2, '0')) = '202210';

 

YEAR()MONTH()CONCAT()을 사용해 문자열로 결합하여 비교할 수도 있습니다. 위 쿼리는 

 

LPAD()

  • LPAD()는 MySQL에서 문자열을 왼쪽으로 패딩(padding)하는 함수입니다.
  • 즉, 문자열의 길이가 지정된 길이보다 짧을 경우, 주어진 문자를 왼쪽에 추가하여 지정된 길이에 맞는 문자열을 만듭니다.

LPAD(MONTH(날짜컬럼), 2, '0')에서 2는 월을 두 자리로 맞추기 위한 자리수를 의미합니다.

 

TIMESTAMP()

날짜와 시간 포함

SELECT * FROM 테이블명
WHERE 날짜컬럼 >= '2022-10-01 00:00:00' AND 날짜컬럼 < '2022-11-01 00:00:00';

 

TIMESTAMP 타입이라면 특정 날짜 범위TIMESTAMP 형식으로 지정할 수 있습니다.

 

STR_TO_DATE()

날짜 포맷을 맞추어 비교

SELECT * FROM 테이블명
WHERE STR_TO_DATE(DATE_FORMAT(날짜컬럼, '%Y-%m'), '%Y-%m') = '2022-10';

 

STR_TO_DATE()를 사용하여 문자열을 날짜로 변환하여 비교할 수 있습니다.