안녕하세요? 만약에 2007년 08월의 자료를 뽑아온다면.... where 로 조건을 걸때 term between 2007-08-01 and 2007-08-31 이런식으로 하나요? 아니면 date_format(finish_date, '%Y-%m') = '2007-08' 이런식으로 하나요? 아니면 좀더 좋은 방법이 있나요?
그냥 통밥으로 생각해보면, 두번째로 제시하신 date_format(...)과 같은 방식은 문자열 비교가 될 듯 싶군요.
1만개의 row가 있다면, 1만번의 컨버젼과 1만번의 문자열 비교를 해야할 것이고, 첫번째 방식은 between에 들어가있는 두개의 날짜만 숫자로 변환되어 날짜 컬럼과 비교할 것 같습니다.
실제로는 어떨지 궁금하군요.
제가 아는 바로는 term between 2007-08-01 and 2007-08-31 와 같은 표현은 1. field의 type이 date인 경우에는 괜찮지만 datetime인 경우에는 8월 31일의 대부분의 data( 00시00분00초 가 아닌 모든)가 빠지게 되고, 2. 끝날을 구하는 문제가 발생을 하는(2월-28, 29-, 기타월-30, 31- 중에서 어느 일이 말일 인지... ) 문제가 있고, date_format(finish_date, '%Y-%m') = '2007-08' 와 같은 표현은 색인을 사용할 수 없으므로, 저는 보통 where '2007-08-01' <= term AND term < DATE_ADD( '2007-08-01', INTERVAL 1 MONTH ) 와 같이 사용해서 range로 찾도록 하는 편입니다.