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

MySQL에서 CONCAT_WS()로 문자열을 연결하며 조건에 맞는 행 선택하기

MySQL에서 CONCAT_WS()로 조건에 맞는 행을 선택하며 문자열 연결하기

MySQL에서 여러 열(column)의 값을 하나의 문자열로 합치면서, 동시에 특정 조건에 맞는 행만 조회하고 싶다면 CONCAT_WS() 함수를 사용하면 됩니다. CONCAT_WS는 'Concatenate With Separator'의 약자로, 첫 번째 인자로 지정한 구분자를 기준으로 나머지 문자열들을 연결해 주는 함수입니다.

실제 동작 과정을 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 사용자 정보를 저장할 테이블을 생성합니다.

mysql> create table demo38
−> (
−> user_id int,
−> user_first_name varchar(20),
−> user_last_name varchar(20),
−> user_date_of_birth date
−> );
Query OK, 0 rows affected (1.70 sec)

2. 샘플 데이터 삽입하기

INSERT 문을 이용해 테이블에 레코드를 추가합니다.

mysql> insert into demo38 values(10,'John','Smith','1990−10−01');
Query OK, 1 row affected (0.14 sec)

mysql> insert into demo38 values(11,'David','Miller','1994−01−21');
Query OK, 1 row affected (0.13 sec)

mysql> insert into demo38 values(11,'John','Doe','1992−02−01');
Query OK, 1 row affected (0.13 sec)

mysql> insert into demo38 values(12,'Adam','Smith','1996−11−11');
Query OK, 1 row affected (0.11 sec)

mysql> insert into demo38 values(13,'Chris','Brown','1997−03−10');
Query OK, 1 row affected (0.13 sec)

3. 테이블 데이터 확인하기

SELECT 문으로 테이블에 저장된 전체 레코드를 조회합니다.

mysql> select *from demo38;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+---------+-----------------+----------------+--------------------+
| user_id | user_first_name | user_last_name | user_date_of_birth |
+---------+-----------------+----------------+--------------------+
| 10      | John            | Smith          | 1990−10−01         |
| 11      | David           | Miller         | 1994−01−21         |
| 11      | John            | Doe            | 1992−02−01         |
| 12      | Adam            | Smith          | 1996−11−11         |
| 13      | Chris           | Brown          | 1997−03−10         |
+---------+-----------------+----------------+--------------------+
5 rows in set (0.00 sec)

4. CONCAT_WS()와 WHERE 조건 함께 사용하기

이제 CONCAT_WS() 함수를 사용해 이름, 성, 출생 연도를 '/' 구분자로 연결하되, WHERE 절의 IN 조건으로 user_id가 11 또는 13인 행만 선택해 보겠습니다.

mysql> select concat_ws('/',user_first_name, user_last_name,'the date of birth year is=', date_format(user_date_of_birth,'%Y')) as Output
−> from demo38
−> where user_id in(11,13);

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

+----------------------------------------------+
| Output                                       |
+----------------------------------------------+
| David/Miller/the date of birth year is=/1994 |
| John/Doe/the date of birth year is=/1992     |
| Chris/Brown/the date of birth year is=/1997  |
+----------------------------------------------+
3 rows in set (0.00 sec)

쿼리 핵심 요소 정리

  • CONCAT_WS('/', ...) : 각 값을 '/'로 구분하여 하나의 문자열로 연결합니다.
  • date_format(user_date_of_birth, '%Y') : DATE 타입의 생년월일 값에서 연도(YYYY) 부분만 추출합니다.
  • where user_id in(11, 13) : user_id가 11 또는 13인 행만 필터링합니다. 그 결과 David Miller(1994년생), John Doe(1992년생), Chris Brown(1997년생) 세 개의 행이 반환됩니다.

참고: CONCAT_WS()는 모든 인자 사이에 구분자를 삽입하기 때문에, 마지막 값 앞에도 '/'가 붙어 'the date of birth year is=/1994'처럼 출력됩니다. 구분자 없이 자연스럽게 표현하고 싶다면 해당 리터럴 문자열을 별도로 처리하거나 CONCAT() 등 다른 방식을 고려해야 합니다.

이처럼 CONCAT_WS()와 WHERE 절을 함께 활용하면 문자열을 깔끔하게 연결하는 동시에, 원하는 조건에 맞는 데이터만 효율적으로 조회할 수 있습니다.