Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL SELECT 문으로 타임스탬프 날짜 범위 조회하기

MySQL에서 타임스탬프(timestamp) 데이터를 특정 날짜 범위로 조회하려면 WHERE 절과 함께 비교 연산자를 사용하면 됩니다. 이 글에서는 기본적인 날짜 범위 조회 방법부터 유닉스 타임스탬프(unix timestamp)를 다루는 방법까지 예제와 함께 자세히 알아보겠습니다.

기본 문법

타임스탬프 데이터의 날짜 범위를 선택할 때는 아래와 같은 문법을 사용합니다.

SELECT * FROM yourTableName
WHERE yourDataTimeField >= anyDateRange
AND yourDataTimeField < anyDateRange

여기서 핵심은 시작 날짜에는 >=(이상)을, 종료 날짜에는 <(미만)을 사용한다는 점입니다. 이렇게 하면 종료 날짜 당일 자정 00:00:00까지의 데이터를 정확하게 포함시킬 수 있습니다.

예제 테이블 생성하기

문법을 실제로 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> create table DateRange
-> (
-> DueTime timestamp
-> );
Query OK, 0 rows affected (1.34 sec)

데이터 삽입하기

INSERT 명령어를 사용해 테이블에 여러 개의 레코드를 삽입합니다.

mysql> insert into DateRange values('2016-11-13');
Query OK, 1 row affected (0.51 sec)

mysql> insert into DateRange values('2016-10-14');
Query OK, 1 row affected (0.23 sec)

mysql> insert into DateRange values('2017-01-23');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DateRange values('2017-05-14');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DateRange values('2017-08-25');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DateRange values('2018-09-28');
Query OK, 1 row affected (0.18 sec)

mysql> insert into DateRange values('2018-11-17');
Query OK, 1 row affected (0.47 sec)

mysql> insert into DateRange values('2018-12-13');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DateRange values('2018-12-16');
Query OK, 1 row affected (0.27 sec)

전체 레코드 확인하기

SELECT 명령어로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DateRange;

실행 결과는 다음과 같습니다.

+---------------------+
| DueTime |
+---------------------+
| 2016-11-13 00:00:00 |
| 2016-10-14 00:00:00 |
| 2017-01-23 00:00:00 |
| 2017-05-14 00:00:00 |
| 2017-08-25 00:00:00 |
| 2018-09-28 00:00:00 |
| 2018-11-17 00:00:00 |
| 2018-12-13 00:00:00 |
| 2018-12-16 00:00:00 |
+---------------------+
9 rows in set (0.00 sec)

날짜 범위로 조회하기

이제 특정 타임스탬프 날짜 범위 내의 데이터를 조회해 보겠습니다. 아래 쿼리는 2017년 5월 14일부터 2018년 12월 16일까지의 데이터를 가져옵니다.

mysql> select *from DateRange
-> where DueTime >= '2017-05-14'
-> and DueTime < '2018-12-17';

실행 결과는 다음과 같습니다.

+---------------------+
| DueTime |
+---------------------+
| 2017-05-14 00:00:00 |
| 2017-08-25 00:00:00 |
| 2018-09-28 00:00:00 |
| 2018-11-17 00:00:00 |
| 2018-12-13 00:00:00 |
| 2018-12-16 00:00:00 |
+---------------------+
6 rows in set (0.00 sec)

결과를 보면 시작 날짜인 2017-05-14는 포함되고(>= 조건), 종료 조건인 2018-12-17 미만의 데이터까지만 조회된 것을 확인할 수 있습니다.

유닉스 타임스탬프로 저장된 경우

만약 타임스탬프가 유닉스 타임스탬프 형식(정수형 초 단위 값)으로 저장되어 있다면, MySQL에서 제공하는 unix_timestamp() 함수를 사용하여 날짜 문자열을 변환한 후 비교하면 됩니다.

select *from yourTableName
where yourColumnName >= unix_timestamp('anyDateValue')
and yourColumnName < unix_timestamp('anyDateValue')

이처럼 unix_timestamp() 함수를 활용하면 일반 날짜 문자열과 유닉스 타임스탬프 컬럼을 손쉽게 비교할 수 있어, 별도의 변환 작업 없이 동일한 방식으로 범위 조회가 가능합니다.