MySQL에서는 SUBSTRING() 함수를 사용하면 테이블 필드(컬럼)에 저장된 문자열 중 원하는 부분만 손쉽게 추출할 수 있습니다. 긴 텍스트에서 제목이나 요약문처럼 필요한 구간만 가져올 때 매우 유용합니다.
SUBSTRING() 기본 문법
SELECT SUBSTRING(yourColumnName, yourStartingPosition, yourLength) FROM yourTableName;
각 인자의 의미는 다음과 같습니다.
- 첫 번째 인자: 대상이 되는 컬럼명
- 두 번째 인자: 추출을 시작할 위치 (1부터 시작)
- 세 번째 인자: 반환받을 문자 수(길이)
예제 테이블 생성
먼저 실습에 사용할 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Title longtext
);
Query OK, 0 rows affected (0.57 sec)데이터 삽입
INSERT 명령으로 몇 개의 레코드를 추가합니다.
mysql> INSERT INTO DemoTable(Title) VALUES('MySQL is a relational database management system');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable(Title) VALUES('MongoDB is a popular No SQL database');
Query OK, 1 row affected (0.18 sec)전체 데이터 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> SELECT * FROM DemoTable;
실행 결과는 다음과 같습니다.
+----+--------------------------------------------------+ | Id | Title | +----+--------------------------------------------------+ | 1 | MySQL is a relational database management system | | 2 | MongoDB is a popular No SQL database | +----+--------------------------------------------------+ 2 rows in set (0.00 sec)
SUBSTRING() 함수 적용하기
이제 SUBSTRING() 함수를 사용해 Title 필드에서 부분 문자열을 추출해 보겠습니다.
mysql> SELECT SUBSTRING(Title, 1, 21) FROM DemoTable;
실행 결과는 다음과 같습니다.
+-----------------------+ | SUBSTRING(Title,1,21) | +-----------------------+ | MySQL is a relational | | MongoDB is a popular | +-----------------------+ 2 rows in set (0.00 sec)
위 쿼리는 각 Title 값의 첫 번째 문자부터 21자리까지 잘라서 반환합니다. 그 결과 'MySQL is a relational'과 'MongoDB is a popular'라는 부분 문자열이 출력된 것을 확인할 수 있습니다.
시작 위치나 길이 값을 조절하면 원하는 구간의 문자열을 자유롭게 추출할 수 있으며, WHERE 절과 함께 사용하면 조건에 맞는 데이터의 일부만 가공해서 조회하는 것도 가능합니다.