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;이렇게 하면 공백이 있는 경우에는 공백 앞부분만, 공백이 없는 경우에는 전체 문자열을 안전하게 추출할 수 있습니다.