MySQL에서, Java에서, Querydsl에서 DATE를 건드려야 할때

Junyeong·2022년 3월 24일
0

주니어 개발자

목록 보기
4/8

Date를 기준으로 정렬을 하든, 포맷을 바꾸든, 그래야 할 일이 잦다.
나는 백엔드를 지향하지만, 풀스택으로 일하고 있다.
그래서 주로 JS에서는 최소한만 할 수 있도록 Java에서 혹은 DB에서 최대한 가공시켜서 값을 내려준다.


MySQL 에서 DATE 건드리기

DATE 값들을 건드릴때 가장먼저 테스트 쿼리를 던져보는 편이다.
그래서 MySQL부터 접근한다.

  • DATE 포맷을 변경해야할때 (EX. varChar -> LocalDate)

    DATE_FORMAT('2022-03-24', '%Y%m%d')
    DATE_FORMAT(변경할 값, 변경할 양식)

  • DATE 날짜를 더하거나 빼야할 때

    DATE_ADD(기준날짜, INTERVAL)
    DATE_SUB(기준날짜, INTERVAL)
    예를들면, DATE_ADD(NOW(), INTERVAL 1 DAY) 여기에 DAY 말고 SECOND 등 가능.


Querydsl 에서 DATE 건드리기

여기는 좀 애매하다.
DATE 객체를 건드리는 이유가 위의 MySQL에서 한 것 처럼, 포맷이나 날짜를 변경하기 위해서 인데, Querydsl에서 제공하는 기능만으로는...
이럴때 보통 StringTemplate 이나 DateTemplate 등으로 템플릿을 열어서 사용한다.
그래서 MySql 문법을 사용하는 점은 같다.

  • DATE 포맷을 변경할때

    StringTemplate dateFormat = Expressions.stringTemplate( "DATE_FORMAT( {0}, {1} )", '2022-03-24', ConstantImpl.create("%Y%m%d));
    이렇게 Expressions 를 활용해서 MySQL 구문을 만들어두고 querydsl 코드에 삽입해서 사용한다.

(DateTemplate 을 써도 되고, 마찬가지로 Expressions가 메서드로 가지고 있다.)

  • DATE 날짜를 더하거나 빼야할 때

    마찬가지로 Expressions 에서 StringTemplate 열어서 MySQL의 구문을 만들고 사용하면 된다. 원리가 같으므로 예시 코드는 생략한다.


Java에서 DATE 건드리기

자바에서는 여러가지 방식이 존재한다.
예시는 그 중에서 내가 주로 쓰는 방식이다.
보통 String으로 날짜값을 받고 있다면, 이 값을 변경해야 할때 date 포맷으로 변경이 필수적이다.
그래서 순서가 String을 Date로 바꾼 뒤, 날짜를 변경하고 다시 String 으로 리턴한다.

  • DATE 포맷을 변경할때 (String <-> LocalDate)

    String currDate = "20220324";
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
    Date date = dateFormat.parse(currDate);
    문자열 날짜 데이터를 어떻게 바꿀지 그 양식을 설정하는 format 객체를 만들어서 이 객체가 제공하는 파싱 메서드를 통해 Date 객체를 리턴받는다.

  • DATE 날짜를 더하거나 빼야할 때

    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.DATE, 7);
    date 라는 이름의 Date객체가 있다고 가정하고 작성한 코드다.
    캘린더 객체를 가져와서 date를 set 해주고 캘런더 객체가 가진 메서드들을 사용해서 값을 변경하는 방식이다. add() 메서드에서 년도를 바꾸고 싶다면 Calendar.YEAR, 2) 이런식으로 쓸 수 있다. 빼줄때는 -(마이너스) 기호를 붙여주면 된다.


이상으로 최근에 회사에서 자주 썼던 것 중의 하나, 정리 끝!

profile
좋아하는 것을 계속 좋아하자.

0개의 댓글