날짜 조회하다가, 늘 쓰던 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
'Development > MySql' 카테고리의 다른 글
mariaDB 삭제 후 mySQL 설치하기 (0) | 2023.01.13 |
---|---|
[MySQL] 효과적인 대용량 데이터 처리 방법 (0) | 2022.12.20 |
MySQL 테이블 크기 확인하기 (0) | 2022.01.18 |
[MySQL] update 시 timeout 에러 발생할 때 (0) | 2022.01.17 |
toad for MySQL 에러 (0) | 2022.01.07 |