본문 바로가기
Back-End (web)

[Querydsl] between 조건. LocalDate to LocalDateTime

by 햄과함께 2020. 8. 5.
320x100

post의 createdDateTime(LocalDateTime) 컬럼이 startDate(LocalDate), endDate(LocalDate) 사이에 있는 값을 뽑기 위해 where 조건을 추가하려고 한다.

builder.and(
  post.createdDateTime.between(
      startDate.atStartOfDay(),
      LocalDateTime.of(searchParams.endDate, LocalTime.MAX)
  )
)

asStartOfDay()로 startDate에 00:00:00을 추가해서 LocalDateTime으로 만든다.

endDate은 23:59:59.999999 을 조건으로 붙이기 위해 LocalDateTime.of를 사용했는데 실제로는 처리될때는 다음날 00:00:00 로 조건이 걸린다고 한다. 즉, endDate가 2020/08/05일 때, 이를 2020/08/05 23:59:59.99999 로 만들어서 between end시간으로 넣지만 실제로는 2020/08/06 00:00:00 으로 쿼리가 나간다.

따라서 endTime 조건을 23:59:59로 하려면 nano 초 단위를 0으로 해줘야 한다.

builder.and(
  post.createdDateTime.between(
      startDate.atStartOfDay(),
      LocalDateTime.of(searchParams.endDate, LocalTime.MAX).withNano(0)
  )
)
320x100

댓글