MySQL에서 타임스탬프 컬럼의 값을 조건에 따라 판별하여 부울(Boolean) 형태로 반환하려면 IF() 함수를 활용하면 됩니다. 이번 글에서는 예제 테이블을 만들고, 날짜 조건에 따라 0 또는 1의 값을 반환하는 방법을 단계별로 살펴보겠습니다.
1. 현재 날짜 확인하기
먼저 CURDATE() 함수를 사용해 현재 날짜를 확인합니다.
mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-12-10 | +------------+ 1 row in set (0.00 sec)
2. 테이블 생성하기
타임스탬프 타입의 컬럼을 가진 테이블을 생성합니다.
mysql> create table DemoTable1890
(
DueDate timestamp
);
Query OK, 0 rows affected (0.00 sec)3. 데이터 삽입하기
INSERT 명령어를 사용해 여러 개의 레코드를 테이블에 추가합니다.
mysql> insert into DemoTable1890 values('2017-12-10');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1890 values('2021-12-10');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1890 values('2018-04-24');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1890 values('2020-05-11');
Query OK, 1 row affected (0.00 sec)4. 전체 데이터 조회하기
SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select * from DemoTable1890;
실행 결과는 다음과 같습니다.
+---------------------+ | DueDate | +---------------------+ | 2017-12-10 00:00:00 | | 2021-12-10 00:00:00 | | 2018-04-24 00:00:00 | | 2020-05-11 00:00:00 | +---------------------+ 4 rows in set (0.00 sec)
5. 타임스탬프 기준으로 부울 값 설정하기
이제 핵심 쿼리입니다. IF() 함수와 INTERVAL 연산자를 조합하여, 마감일(DueDate)이 현재 날짜로부터 2년 이내인지 여부에 따라 상태 값을 1 또는 0으로 반환합니다.
mysql> select if(DueDate > curdate() - interval 2 year,false,true) as Status from DemoTable1890;
실행 결과는 다음과 같습니다.
+--------+ | Status | +--------+ | 1 | | 0 | | 0 | | 0 | +--------+ 4 rows in set (0.00 sec)
쿼리 동작 원리
위 쿼리는 curdate() - interval 2 year로 현재 날짜에서 2년 전 시점을 계산한 뒤, 각 레코드의 DueDate가 그 시점보다 큰지(즉, 최근 2년 이내인지)를 판단합니다. 조건이 참이면 true(1), 거짓이면 false(0)를 반환하여 결과를 부울 값으로 손쉽게 확인할 수 있습니다. 이 방식은 만료 여부 확인, 활성/비활성 상태 구분 등 다양한 실무 시나리오에 유용하게 활용할 수 있습니다.