안녕하세요. 그린주입니다 ๑'ٮ'๑
오늘도 힘차게 시작해보겠습니다!
개요
이번 글에서는 Querydsl에서 datetime을 date로 format 하여 select와 groupBy에 사용하는 방법에 대해 공유해드리겠습니다.
목차
Date Format
Select와 GroupBy
Date Format
member 테이블의 reg_date 타입은 datetime입니다. 이 데이터를 가지고 날짜별로 조회하려고 할 때 Querydsl에서 date로 format 하여 select와 groupBy에 삽입해주는 과정입니다.
Querydsl에서 datetime을 date로 format 하려면 SQL Function인 "Expressions.stringTemplate()" 또는 "Expressions.dateTemplat()"을 사용합니다.
(원본) 2022-04-23 03:12:00 => (원하는 포맷) 2022-04-23
stringTemplate()과 dateTemplat()는 공통적으로 MySQL 문법이 사용되기 때문에 MySQL 문법부터 알려드리겠습니다.
MySQL에서 DATE_FORMAT() 사용
MySQL에서 date를 format 하는 방법은 아래와 같습니다.
DATE_FORMAT('2022-04-23 03:12:00', '%Y-%m-%d');
DATE_FORMAT('변경할 값', '변경할 양식');
// 결과
2022-04-23
Querydsl에서 stringTemplate() 사용
StringTemplate formattedDate = Expressions.stringTemplate(
"DATE_FORMAT({0}, {1})"
, member.regDate
, ConstantImpl.create("%Y-%m-%d"));
// 쿼리로 표현한다면
SELECT DATE_FORMAT(a.reg_date, '%Y-%m-%d') FROM member a;
Expressions.stringTemplate(MySQL 문법, 변경할 값, 변경할 양식)
첫 번째 인자는 MySQL 문법 DATE_FORMAT({0}, {1})
두 번째는 칼럼명 / 변경할 값({0}에 들어갈 값)
세 번째는 format 할 유형 / 변경할 양식을 입력합니다.
Querydsl에서 dateTemplate() 사용
StringTemplate formattedDate = Expressions.dateTemplate(
String.class
, "DATE_FORMAT({0}, {1})"
, member.regDate
, ConstantImpl.create("%Y-%m-%d"));
Expressions.stringTemplate(표현 유형, MySQL 문법, 변경할 값, 변경할 양식)
첫 번째 인자는 표현식 유형으로 responseDto에서 regDate 타입을 String으로 했기 때문에 저는 String.class로 적용했습니다.
두 번째, 세 번째, 네 번째는 1번에서 설명한 stringTemplate과 동일합니다.
Select와 GroupBy
Template 방법 중 하나를 사용해서 formattedDate를 만들었다면 select와 groupBy에 사용하는 방법은 아주 간단합니다.
queryFactory.select(Projections.fields(MemberResponseDto.class,
formattedDate
, member.id
))
.from(member)
.groupBy(formattedDate)
.fetch();
아래와 같이 쿼리문이 나오고 날짜별로 조회되는 걸 확인할 수 있습니다.
select
date_format(charge0_.trad_date,
?) as col_0_0_,
member0_.id as col_1_0_
from
member member0_
group by
date_format(member0_.reg_date,
?)
[TRACE] o.h.type.descriptor.sql.BasicBinder - binding parameter [1] as [VARCHAR] - [%Y-%m-%d]
마무리
이렇게 Querydsl에서 datetime을 date로 format 하여 select와 groupBy에 사용하는 방법에 대해 알아보았습니다.
다들 성공하셨을까요?? 끝까지 파이팅입니다!
긴 글 봐주셔서 감사합니다!
오늘도 행복한 하루 보내세요 ✿'◡'✿
참고
[querydsl, mysql] DATE_FORMAT 등 이용해 groupby 사용하기
'🌜 Database' 카테고리의 다른 글
MySQL 프로시저(테이블 백업)와 이벤트 생성 ( MySQL ) (0) | 2022.10.13 |
---|---|
Querydsl에서 사용하는 Case(when, then), Coalesce(IFNULL), Concat(문자열 붙이기) 알아보기 ( Querydsl / Java ) (0) | 2021.12.10 |