MySQL에서 첫 번째 문자만 검색/교체하기
MySQL에서 문자열 안에 여러 번 등장하는 특정 문자 중 첫 번째로 나타난 문자만 검색하여 교체하려면 일반적인 REPLACE() 함수만으로는 부족합니다. 이때는 CONCAT(), REPLACE(), 그리고 INSTR() 함수를 조합하여 사용하면 원하는 결과를 얻을 수 있습니다.
1. 사용자 정의 세션 변수 설정
먼저 테스트에 사용할 사용자 정의 세션 변수를 설정하는 쿼리는 다음과 같습니다.
mysql> set @Sentence='Thks ks is a my string';
Query OK, 0 rows affected (0.00 sec)
이 문자열에는 'k'가 여러 번 등장하지만, 이 예제에서는 첫 번째 'k'만 'i'로 단 한 번 교체하는 것이 목표입니다.
2. INSTR() 함수를 활용한 교체 쿼리
아래 쿼리는 INSTR() 함수로 첫 번째 'k'의 위치를 찾은 뒤, 해당 위치까지만 잘라내어 REPLACE()로 교체하고, 나머지 문자열과 다시 연결하는 방식으로 동작합니다.
mysql> select @Sentence as NewString ,CONCAT(REPLACE(LEFT(@Sentence,
INSTR(@Sentence, 'k')), 'k', 'i'),
-> SUBSTRING(@Sentence, INSTR(@Sentence, 'k') + 1)) as ChangeOnlyOneTime;
동작 원리
- LEFT(@Sentence, INSTR(@Sentence, 'k')): 첫 번째 'k'가 있는 위치까지의 문자열을 추출합니다.
- REPLACE(..., 'k', 'i'): 추출한 앞부분에서 'k'를 'i'로 교체합니다. 이 구간에는 'k'가 하나뿐이므로 한 번만 교체됩니다.
- SUBSTRING(@Sentence, INSTR(@Sentence, 'k') + 1): 첫 번째 'k' 이후의 나머지 문자열을 그대로 가져옵니다.
- CONCAT(): 교체된 앞부분과 나머지 문자열을 합쳐 최종 결과를 만듭니다.
3. 실행 결과 확인
다음 출력 결과를 보면 첫 번째로 등장한 'k'만 'i'로 교체되고, 나머지 'k'는 그대로 유지되었음을 확인할 수 있습니다.
+------------------------+------------------------+
| NewString | ChangeOnlyOneTime |
+------------------------+------------------------+
| Thks ks is a my string | This ks is a my string |
+------------------------+------------------------+
1 row in set (0.00 sec)
이처럼 INSTR()로 대상 문자의 위치를 먼저 파악한 후 문자열을 분할·교체·재결합하는 방식을 사용하면, MySQL에서도 특정 문자의 첫 번째 등장만 선택적으로 치환할 수 있습니다.