MySQL(DB)

[바미] Mysql 이전 날짜(특정날짜) 데이터 조회에 대하여

Bami 2022. 6. 21. 23:14
728x90
반응형

안녕하세요. 오늘은 Mysql에서 이전 이전 날짜 또는 특정 날짜를 조회할 때 유의 할 부분을 알려드리고 싶어 포스팅을 하게 되었습니다.

 

날짜 칼럼에 있는 데이터가 위와 같이 있습니다.

여기서 만약 1주 전, 1년 전 데이터를 조회 하고 싶을 때 보통 인터넷에 나와있는 코드는 아래와 같습니다.

// 1분전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -1 MINUTE)

// 10분전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -10 MINUTE);

// 한시간전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -1 HOUR);

// 하루전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -1 DAY);

// 한달전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -1 MONTH);

// 1년 전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -1 YEAR);

Date 칼럼의 데이터가 아까 보여드린 것과 같이 있을 때

1년 전 데이터를 조회할 때와 1달 전 데이터를 조회하는 쿼리의 결과는 같게 나옵니다. 확인해볼까요?

YEAR 결과 값
MONTH 결과 값

그 이유는 

DATE_ADD(DATE(Now()), INTERVAL -1 MONTH);

부분의 값을 보면 알 수 있습니다. 위의 값을 확인하려면 앞에 SELECT를 넣어주면 됩니다.

 

MONTH

현재 날짜로부터 1달 전 날짜인 5월 21을 출력하고,

 

YEAR

현재 날짜로부터 1년 전인 날짜인 21년 06월 21일을 출력하고 있습니다.

그렇기 때문에 

where DATE(Mydate) >= DATE_ADD(DATE(Now()), INTERVAL -1 MONTH);
        mydate가 가지고 있는 date >= 2022-05-21
                               
where DATE(Mydate) >= DATE_ADD(DATE(Now()), INTERVAL -1 YEAR);
        mydate가 가지고 있는 date >= 2021-06-21

로 풀 수 있습니다. 값이 모두 만족하죠?

위에 보셨다시피 제가 가지고 있는 칼럼의 데이터는 22년 5월25 ~ 29일 데이터만 가지고 있습니다.

그렇기 때문에 위의 값이 모두 만족하기 때문에 1년 전 데이터를 가지고 오고 싶어도 엉뚱한 데이터를 가져오게 되고, 

만약 데이터 삭제를 위한 SQL문이였다면 엉뚱한 데이터를 지워버리게 될 것입니다.

 

그래서 해당 날짜에 맞는 데이터를 조회하는 목적이시라면

// 1분전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -1 MINUTE)

// 10분전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -10 MINUTE);

// 한시간전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -1 HOUR);

// 하루전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -1 DAY);

// 한달전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -1 MONTH);

// 1년 전 데이터 조회
SELECT * FROM 테이블명 
where 시간칼럼명 = DATE_ADD(NOW(), INTERVAL -1 YEAR);

위와 같이 '='연산자를 사용하시는 것을 추천드립니다.

728x90
반응형