Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- kotlin
- 오블완
- Linux
- Pinpoint
- CloudWatch
- Elasticsearch
- 코틀린 코루틴의 정석
- mysql 튜닝
- kotlin querydsl
- 기록으로 실력을 쌓자
- minikube
- IntelliJ
- 공부
- MySQL
- AI
- 정보처리기사 실기
- Java
- CKA
- 정보처리기사실기 기출문제
- kotlin spring
- 티스토리챌린지
- aws
- kotlin coroutine
- Kubernetes
- AWS EKS
- 정보처리기사 실기 기출문제
- Spring
- CKA 기출문제
- PETERICA
- APM
Archives
- Today
- Total
피터의 개발이야기
[Kotlin] QueryDSL에서 YYYY-MM로 검색하기 본문
반응형
ㅁ 들어가며
ㅇ 대부분의 일자 데이터들은 YYYY-MM-DD, 년월일의 형태를 띄고 있지만, 오늘 개발했던 데이터는 YYYY-MM의 형태였다.
ㅇ Kotlin에서 Querydsl을 사용하여 YYYY-MM 형태의 날짜를 between 조건으로 검색하자, 파싱 에러가 발생하였다.
ㅁ Querydsl에서 YYYY-MM로 검색하는 방법
ㅇ Kotlin에서 Querydsl을 사용하여 YYYY-MM 형태의 날짜를 between 조건으로 검색하는 방법
- 먼저 YYYY-MM 형태의 문자열을 날짜 객체로 변환한다.
- 해당 월의 시작일과 종료일을 계산한다.
- between 조건을 사용하여 쿼리를 작성한다.
ㅁ YYYY-MM 검색 예시
import com.querydsl.jpa.impl.JPAQueryFactory
import java.time.LocalDate
import java.time.YearMonth
import java.time.format.DateTimeFormatter
fun searchBetweenYearMonth(queryFactory: JPAQueryFactory, yearMonth: String) {
val formatter = DateTimeFormatter.ofPattern("yyyy-MM")
val ym = YearMonth.parse(yearMonth, formatter)
val startDate = ym.atDay(1)
val endDate = ym.atEndOfMonth()
val query = queryFactory
.selectFrom(qEntity)
.where(qEntity.date.between(startDate, endDate))
.fetch()
}
ㅇ YearMonth.parse()를 사용하여 YYYY-MM 문자열을 YearMonth 객체로 변환했다.
ㅇ atDay(1)로 해당 월의 첫 날을, atEndOfMonth()로 해당 월의 마지막 날을 구한다.
ㅇ Querydsl의 between() 메소드를 사용하여 시작일과 종료일 사이의 데이터를 조회한다.
ㅁ
# Test용으로 테이블 생성
[2024-07-11 22:06:59] Connected
> create database test
[2024-07-11 22:06:59] 1 row affected in 67 ms
> use test
[2024-07-11 22:09:14] completed in 29 ms
test> create table monthDataTest(
id bigint auto_increment comment 'ID'
primary key,
month_date varchar(7) null comment 'YYYY-MM',
created_at datetime(6) null comment '생성 시간',
updated_at datetime(6) null comment '수정 시간',
work_type varchar(30) null comment '근무형태 타입'
)
[2024-07-11 22:09:22] completed in 111 ms
# data 생성
test> insert into monthDataTest (month_date, created_at, updated_at, work_type) value ('2024-07', now(), now(), 'workingHard')
[2024-07-11 22:22:54] 1 row affected in 39 ms
# YYYY-MM 테이터 조회
select *
from monthDataTest
where month_date between '2024-01' and '2024-08';
ㅇ MySQL에서는 YYYY-MM 형태의 String으로 검색을 해도 문제가 없다.
ㅇ Querydsl의 between의 from과 end의 자료형은 LocalDateTime이기 때문에 형에 맞추저 변환하지 않으면 Exception이 발생한다.
ㅁ 마무리
이 방법을 사용하면 특정 년월에 해당하는 데이터를 효과적으로 조회할 수 있다. 단, 실제 사용 시에는 프로젝트의 엔티티 구조와 날짜 필드의 타입에 따라 약간의 조정이 필요할 수 있다.
반응형
'Programming > Kotlin' 카테고리의 다른 글
[Kotlin] Kotlin으로 Shell 유틸리티 만들기: 파일 복사와 압축 (1) | 2024.07.18 |
---|---|
[Kotlin] kotlin에서 shell 실행하기 (0) | 2024.07.17 |
[Kotlin] ManagementFactory을 이용한 JVM 모니터링 방법 (1) | 2024.07.14 |
[Kotlin] kotlin 폴더 전체 삭제 방법 (0) | 2024.07.13 |
[Kotlin] List 사용법 정리 (0) | 2024.07.12 |
Comments