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

MySQL에서 공백 앞의 모든 문자를 추출하는 방법

MySQL에서 공백 앞 문자열 추출하기

MySQL에서 특정 컬럼 값 중 공백 앞에 있는 모든 문자를 가져오려면 LEFT() 함수와 LOCATE() 함수를 함께 사용하면 됩니다. 기본 문법은 다음과 같습니다.

SELECT LEFT(컬럼명, LOCATE(' ', 컬럼명) - 1) AS 별칭 FROM 테이블명;

LOCATE() 함수는 문자열 내에서 공백(' ')이 처음 나타나는 위치를 반환하고, LEFT() 함수는 그 위치보다 한 글자 앞까지의 문자열을 잘라내어 반환합니다. 이 두 함수를 조합하면 공백 앞부분만 깔끔하게 추출할 수 있습니다.

예제 테이블 생성하기

개념을 이해하기 위해 먼저 예제용 테이블을 만들어 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> CREATE TABLE AllCharacterBeforeSpace
   -> (
   -> FirstNameAndLastName VARCHAR(200)
   -> );
Query OK, 0 rows affected (0.51 sec)

샘플 데이터 삽입하기

이제 테이블에 몇 개의 레코드를 삽입해 보겠습니다. 이름과 성이 공백으로 구분된 값들을 넣어줍니다.

mysql> INSERT INTO AllCharacterBeforeSpace VALUES('John Smith');
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO AllCharacterBeforeSpace VALUES('Carol Taylor');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO AllCharacterBeforeSpace VALUES('Maria Garcia');
Query OK, 1 row affected (0.16 sec)

mysql> INSERT INTO AllCharacterBeforeSpace VALUES('James Johnson');
Query OK, 1 row affected (0.17 sec)

저장된 전체 레코드 확인하기

SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> SELECT * FROM AllCharacterBeforeSpace;

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

+----------------------+
| FirstNameAndLastName |
+----------------------+
| John Smith           |
| Carol Taylor         |
| Maria Garcia         |
| James Johnson        |
+----------------------+
4 rows in set (0.00 sec)

공백 앞 문자만 추출하는 쿼리 실행하기

이제 실제로 공백 앞의 문자들(즉, 이름 부분)만 추출하는 쿼리를 실행해 보겠습니다.

mysql> SELECT LEFT(FirstNameAndLastName, LOCATE(' ', FirstNameAndLastName) - 1) AS FirstNameBeforeSpace
   -> FROM AllCharacterBeforeSpace;

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

+----------------------+
| FirstNameBeforeSpace |
+----------------------+
| John                 |
| Carol                |
| Maria                |
| James                |
+----------------------+
4 rows in set (0.03 sec)

위 결과에서 확인할 수 있듯이, 각 레코드에서 공백 앞에 위치한 이름(John, Carol, Maria, James)만 정상적으로 추출되었습니다.

참고 사항

주의할 점은, 해당 컬럼 값에 공백이 포함되어 있지 않은 경우 위 쿼리는 빈 문자열(empty string)을 반환한다는 것입니다. 이는 LOCATE()가 공백을 찾지 못하면 0을 반환하고, LEFT(문자열, 0-1)LEFT(문자열, -1)의 결과가 빈 문자열이 되기 때문입니다.

공백이 없는 경우 원본 문자열 전체를 반환하고 싶다면 IF() 또는 CASE 문을 활용하여 다음과 같이 처리할 수 있습니다.

SELECT IF(LOCATE(' ', FirstNameAndLastName) > 0,
       LEFT(FirstNameAndLastName, LOCATE(' ', FirstNameAndLastName) - 1),
       FirstNameAndLastName) AS Result
FROM AllCharacterBeforeSpace;

이렇게 하면 공백이 있는 경우에는 공백 앞부분만, 공백이 없는 경우에는 전체 문자열을 안전하게 추출할 수 있습니다.