특정 기간 데이터 조회 경험
배경
최근 특정 기간 데이터를 조회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;| id | created_at |
|---|---|
| 1 | 2012-06-01 00:00:00 |
| 2 | 2012-06-01 23:59:59 |
| 3 | 2012-06-22 23:59:59 |
SELECT id, created_at FROM table where created_at BETWEEN '2021-06-01' AND '2021-06-22';| id | created_at |
|---|---|
| 1 | 2012-06-01 00:00:00 |
| 2 | 2012-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'| id | created_at |
|---|---|
| 1 | 2012-06-01 00:00:00 |
| 2 | 2012-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()를 통해날짜형식으로 바꿔 조회할 수 있다.