Development/MySql

date 조회 시 유의사항

곽진돔 2022. 1. 18. 10:46

날짜 조회하다가, 늘 쓰던 between A and B를 사용하였는데 특정 날짜가 안나왔다.

 

상황

between A and B 사용

where date between '2021-10-01' and '2021-12-31'

where date between '2021-10-01' and '2021-12-31'

이렇게 입력했더니 2021-10-01~2021-12-30 일자만 출력 되었다..

 

where date_format(sd_date,'%Y%m%d')=20211231

분명 조회했을땐 데이터가 있었는데 안나오길래 찾아본결과,

 

해당 date 칼럼은 datetime 형식으로, 내가 조회할때 시간을 입력하지 않아서 자동으로 00:00:00으로 된 것이다.

그래서 실제로 조회할때의 값은 2021-10-01 00:00:00 ~ 2021-12-31 00:00:00 으로 조회되어, 31일자에 시간이 입력된 날짜들은 조회되지 않은 것,, 23일 전체 데이터를 뽑고 싶다면 021-10-01 00:00:00 ~ 2021-12-31 23:59:59로 조회해야하는 것이다.

 

결국 형변환의 문제.

 

형 변환을 해야되서 발생하는 문제로, 내가 기존에 사용했던 코드와 같이 datetime에 시간을 명시하지 않았을 때는 00:00:00 가 기본이 된다.

 

수정한 코드

select * from table_name
where date_format(date,'%Y%m%d')>= 20211001 and  date_format(date,'%Y%m%d')<= 20211231 order by date

date_format으로 조회하여 원하는 데이터값을 출력하였다.

 

또는 아래와 같이 사용할 수 있다.

select * from table_name
where date between '2021-10-01 00:00:00' and '2021-12-31 23:59:59' order by date