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

MySQL CONTAINS() 대체 방법: CURDATE()와 CONCAT()으로 특정 연도 포함 데이터 조회하기

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 타입 컬럼에 연도 정보가 저장되어 있을 때 특히 유용합니다.