MySQL에는 CONTAINS()라는 이름의 함수가 존재하지 않습니다. 하지만 걱정하지 않으셔도 됩니다. CONCAT() 함수와 CURDATE() 함수를 조합하면 동일한 결과를 손쉽게 얻을 수 있습니다.
이 글에서는 실제 예제를 통해 현재 날짜의 연도가 문자열 컬럼에 포함되어 있는 레코드를 조회하는 방법을 단계별로 살펴보겠습니다.
1단계: 현재 날짜 확인하기
먼저 CURDATE() 함수를 사용하여 현재 날짜를 확인해 보겠습니다.
mysql> select curdate();
실행 결과는 다음과 같습니다.
+------------+ | curdate() | +------------+ | 2019-11-28 | +------------+ 1 row in set (0.00 sec)
2단계: 테이블 생성하기
예제에 사용할 테이블을 생성합니다. 직원 이름(Name)과 입사 연도 정보(JoiningYear)를 저장하는 간단한 구조입니다.
mysql> create table DemoTable1803
(
Name varchar(20),
JoiningYear varchar(20)
);
Query OK, 0 rows affected (0.00 sec)3단계: 샘플 데이터 삽입하기
INSERT 명령어를 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable1803 values('Chris','2020/2017');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1803 values('David','2017/2018');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1803 values('Adam','2018/2019');
Query OK, 1 row affected (0.00 sec)4단계: 저장된 데이터 전체 조회하기
SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select * from DemoTable1803;
실행 결과는 다음과 같습니다.
+-------+-------------+ | Name | JoiningYear | +-------+-------------+ | Chris | 2020/2017 | | David | 2017/2018 | | Adam | 2018/2019 | +-------+-------------+ 3 rows in set (0.00 sec)
5단계: CURDATE()와 CONCAT()를 활용한 핵심 쿼리
다음은 JoiningYear 컬럼에 현재 연도가 포함된 레코드만 조회하는 쿼리입니다. LIKE 연산자와 함께 CONCAT(), YEAR(), CURDATE() 함수를 조합하여 사용했습니다.
mysql> select * from DemoTable1803 where JoiningYear like concat('%', YEAR(CURDATE()), '%');위 쿼리의 실행 결과는 다음과 같습니다.
+------+-------------+ | Name | JoiningYear | +------+-------------+ | Adam | 2018/2019 | +------+-------------+ 1 row in set (0.00 sec)
결과 분석
쿼리 실행 시점의 현재 연도는 2019년입니다. 세 개의 레코드 중 JoiningYear 값에 '2019'가 포함된 유일한 레코드는 'Adam'의 '2018/2019'입니다. 따라서 위 쿼리는 정확히 해당 레코드 하나만 반환하게 됩니다.
이처럼 MySQL에서 CONTAINS() 함수가 없더라도 LIKE + CONCAT() + YEAR(CURDATE()) 조합을 활용하면 특정 연도가 문자열에 포함되어 있는지 손쉽게 검사할 수 있습니다. 이 방식은 날짜 형식이 아닌 varchar 타입 컬럼에 연도 정보가 저장되어 있을 때 특히 유용합니다.