Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

특정 기간 데이터 조회 경험

MYSQL, 20212 min read

배경

최근 특정 기간 데이터를 조회API를 만들면서 날짜 데이터 조회 경험로 어려움을 느꼈습니다.

이번에는 특정 날짜 데이터를 조회하는 sql을 작성하려고 합니다.

SELECT * FROM table WHERE date(created_at) BETWEEN '2021-06-01' AND '2021-06-22'
SELECT * FROM table WHERE created_at BETWEEN '2021-06-01' AND '2021-06-22'

두 SQL중 2021/6/1 부터 2021/6/22 까지(특정 날짜)로 데이터를 조회하는 SQL은 어떤 것일까요? 지금부터는 실제로 mysql 환경에서 table을 작성하고 결과를 확인하려고 합니다.

실제로 해보기

created_at 컬럼에 데이터는 날짜와 시간을 모두 포함합니다.

SELECT id, created_at FROM table;
idcreated_at
12012-06-01 00:00:00
22012-06-01 23:59:59
32012-06-22 23:59:59
SELECT id, created_at FROM table where created_at BETWEEN '2021-06-01' AND '2021-06-22';
idcreated_at
12012-06-01 00:00:00
22012-06-01 23:59:59
  • created_at날짜시간 모두 포함
  • '2021-06-01'형태는 날짜만 나타내기 때문에 시간데이터는 '00:00:00'이다
  • '2021-06-01 00:00:00' 부터'2021-06-22 00:00:00'의 범위 조회 (6/1일 하루의 데이터만 조회)
SELECT id, created_at FROM table where date(created_at) BETWEEN '2021-06-01' AND '2021-06-22'
idcreated_at
12012-06-01 00:00:00
22012-06-22 23:59:59
  • date(created_at)날짜만 포함
  • date()함수를 통해 created_at 의 날짜를 비교했을때 2012-06-01부터'2012-06-02`를 포함하는 모든 데이터 값 조회
  • '2021-06-01 00:00:00' 부터'2021-06-30 23:59:59'의 범위 조회 (6/1~6/2일까지 데이터 조회)

결론

  • where절에서 Mysql BETWEEN a AND b 를 사용해 a와 b를 포함하는 모든 데이터를 조회한다.
  • 기간을 조회시 조건이 날짜 형식인지 날짜+시간 인지 주의한다.
  • 조회할 데이터가 날짜 형식일때 조회할 날짜+시간데이터를 date()를 통해날짜형식으로 바꿔 조회할 수 있다.
© 2024 by GwiyeomGo Tech Blog. All rights reserved.