반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

샘오리_개발노트

QueryDSL에서 Date 타입들의 Parsing and Comparing (StringTemplate, DateTemplate, & Expressions) 본문

개발자 전향 프로젝트

QueryDSL에서 Date 타입들의 Parsing and Comparing (StringTemplate, DateTemplate, & Expressions)

샘오리 2023. 2. 3. 17:22
728x90
반응형

 

여러분은 무슨 이유에서인지 날짜를 비교해야 한다.

하지만 QueryDSL의 자체적인 함수로는 날짜 타입의 변환이 어렵다.

그래서 사용되는 것이 StringTemplate과 DateTemplate, 그리고 Expressions이다.

 

만약 가지고 있는 파라미터의 Date 타입이 java.util.Date인데

Date라는 타입 자체를 버리지 않으면서 한국에서는 흔한 locale인

0000년-00월-00일 00시:00분:00초 라는 포맷을 가지도록 변환해주고 싶다면

아래와 같이 활용하면 된다.

DateTimeTemplate dateTime = Expressions.dateTimeTemplate(LocalDateTime.class, "DATE_FORMAT({0}, {1})", QueryDSL전용 dto.칼럼명 , "YYYY-MM-DD HH24:MI:SS");

참고로

*YYYY-MM-DD HH24:MI:SS 에서 24는 24시 기준을 뜻한다. 예: 16시, 21시 등등.. 

 

그러나 편의를 위해 String 타입으로 변환하여 비교하는 경우가 많다.

아래는 String 타입으로 변환하는 코드이다.

StringTemplate dateTime = Expressions.stringTemplate("TO_CHAR({0}, {1})", QueryDSL전용 dto.칼럼명, "YYYY-MM-DD HH24:MI:SS");

 

반대로 받아온 값이 String 타입인데 Date 타입으로 변환하고 싶을 수 있다.

그럴 때는 

DateTemplate toDate = Expressions.dateTemplate(LocalDateTime.class, "TO_DATE({0}, {1})", QueryDSL전용 dto.칼럼명, Expressions.constant("YYYY-MM-DD HH24:MI:SS"));

 

만약 오늘 날짜를 비교하고 싶다면 QueryDSL전용 dto.칼럼명을 new Date()로 받아주고

원하는 날짜 포맷을 입력해주기만 하면 된다.

 

아래는 몇가지 Date format의 예시이다.

https://sidepower.tistory.com/294

 

오라클(Oracle) 날짜 포멧 SYSDATE . 유용한 날짜함수들

오라클 사용할 때 필수로 숙지해야 될 게 바로 날짜 이용과 조작일 거예요. 날짜에 대해 간단하게 정리합니다. ■ SYSDATE 쿼리문을 실행하는 순간의 날짜와 시간, 분, 초를 알려줍니다. 조회하면

sidepower.tistory.com

그런뒤 두 변수를 비교해야 할 때는

where 조건절에

아래 연산자들을 사용하면 된다.

 

  • eq ===
  • ne !==
  • lt <
  • loe <=
  • gt >
  • goe >=

728x90
반응형
Comments