개발/Spring

특정 날짜 하루에 해당하는 데이터를 찾을 때

신매력 2013. 2. 15. 15:21

아래 처럼 날짜를 text box에 입력 받는다.




String으로 받아서 


select * from 테이블 where dttm = '2013-02-15' 

조회를 해보면 데이터가 원하는대로 나오지 않는다.


기본으로 '2013-02-15 00:00:00' 이렇게 들어있기 때문이다. 

(2월15일의 딱 열두시 00분 00초 인 데이터를 찾는것)




그래서 전에는

dttm >= '2013-02-15 00:00:00' AND dttm <= '2013-02-15 23:59:59' 

이렇게 썼었지만 이건 좋은 방법이 아니다..




좋은 방법은 아래를 볼 것 !




1. 컨트롤러


파라미터를 객체로 받음 - 

객체 안에 있는 필드명과 넘어오는 파라미터의 key가 일치하면 알아서 객체로 들어온다는거


@Controller
public class TestController {

   @RequestMapping("/test");

   public void testMethod(Test test) {

       ... 

   }

} 




2. 도메인객체


스트링값을 DATE형으로 받는다


 @Data

public class Test {

   ....

   @DateTimeFormat(iso = ISO.DATE)

   private Date dttm = null;

}


날짜가 없으면 null로 초기화하고, String으로 넘어온 날짜를 

@DateTimeFormat 어노테이션에 의해 DATE형으로 받아올 수 있다.



3. 쿼리


<select id="selectData" parameterType="Test" resultType="Test">

   SELECT * FROM TEST

   WHERE 

    <![CDATA[

       DTTM >= #{dttm} AND DTTM <= DATE_ADD(#{dttm}, INTERVAL 1 DAY)

     ]]>

</select> 


dttm에는 2013-02-15 00:00:00.0 (타임스템프) 값이 들어있다.

interval 1 day로 하루가 더해지면,

2013-02-15 00.00.00.0 ~ 2013-02-16 00.00.00.0 사이의 데이터가 보여지게 되는 것이다.





하루 : INTERVAL 1 DAY

달 : INTERVAL 1 MONTH

년 : INTERVAL 1 YEAR

시간 : INTERVAL 1 HOUR

분 : INTERVAL 1 MINUTE

초 : INTERVAL 1 SECOND


하루 전이면 INTERVAL -1 DAY

마이너스를 붙이면 된다