개발을 하다보면 테이블에 날짜데이터를 저장하는 경우가 자주 있는데(아마 대부분의 테이블 설계에서 날짜 데이터는 포함되지 않을까 싶다), 현재 나는 JPA를 이용해 개발을 하고 있기 때문에 쿼리문을 작성하는 경우가 많지는 않은데, 간간히 querydsl을 이용할 때 먼저 쿼리문을 작성하여 작성한 쿼리문을 이용해 코드로 만들고 있는데, 조회조건에 날짜가 들어갈 때 어떻게 비교할 것인가에 대해서 간혹 헷갈리는 경우가 있어 정리해보고자 한다.
일단 대략 member라는 테이블이 존재하고 그 테이블에는 생성일이라는 컬럼이 존재한다고 가정했을 때, member테이블에서 2020년 3월 18일날 생성된 로우를 찾고자 할 때 쿼리문은 다음과 같이 작성하면 된다.
1
2
3
4
5
6
7
8
9
10
|
-- createDate의 컬럼의 데이터 타입이 YYYY-MM-DD hh:mm:ss 일 때
-- between 이용
select *
from members
where createDate between '2020-03-18 00:00:00'
and '2020-03-18 23:59:59';
-- 부호를 이용
select *
from members
where createDate >= convert('2020-01-18 00:00:00', date)
and createdAt < convert('2020-03-18 23:59:59', date);
|
다른 블로그에서는 between절을 이용하는 것 보다 부호를 이용해 쿼리문을 짰을 때 검색속도면에서 이득이라고 한 글도 본 것 같은데, 직접 경험해보질 않아서 나는 잘 모르겠다.
기회가 된다면 비교해봐야겠다.
'SQL' 카테고리의 다른 글
컬럼의 값이 null경우 치환 하는방법 (0) | 2020.07.24 |
---|---|
Sql 집계함수(SUM, AVG, MAX, MIN, COUNT) (0) | 2020.04.21 |
SQL에서 null을 조건으로 주는방법? (0) | 2020.02.12 |
sql에서의 inner join (0) | 2020.02.04 |