반응형
데이터 안에 포함된 특정 단어나 문자를 다른 값으로 바꾸고 싶을 때 가장 간단하고 강력한 도구가 REPLACE() 함수다.
문자열 치환, 잘못된 입력 수정, 정규 포맷 일괄 정리 등에 실무에서 자주 활용된다.

🧩 REPLACE() 함수 기본 문법
REPLACE(str, from_str, to_str)
- str: 원본 문자열
- from_str: 찾아서 바꿀 대상
- to_str: 새로 바꿀 문자열
from_str이 여러 번 등장하면 모두 한꺼번에 치환된다.
🔹 기본 예제
SELECT REPLACE('Hello World', 'World', 'MySQL'); -- 결과: 'Hello MySQL'
SELECT REPLACE('2025/07/18', '/', '-') -- 결과: '2025-07-18'
특정 기호나 구분자 변경, 오타 수정, 문자열 구성 조정 등에 매우 유용하다.
반응형
🧪 실무 응용 예제
-- 전화번호에서 '-' 제거
SELECT REPLACE(phone, '-', '') AS phone_cleaned
FROM users;
-- 게시글 내용에서 금칙어를 별표 처리
SELECT REPLACE(content, '욕설', '**') AS filtered_content
FROM board;
-- HTML 태그 치환 (예: <br> → 줄바꿈 문자)
SELECT REPLACE(comment, '<br>', '\n') AS text_comment
FROM replies;
REPLACE()는 정규표현식이 아닌 단순 문자열 치환 방식이라, 정확한 문자열 일치가 필요하다.
패턴 기반으로 치환하려면 REGEXP_REPLACE()를 사용해야 한다.
🔸 NULL 처리 주의사항
SELECT REPLACE(NULL, 'a', 'b'); -- 결과: NULL
SELECT REPLACE('abc', NULL, 'b'); -- 결과: NULL
- 세 인자 중 하나라도 NULL이면 결과는 무조건 NULL이다.
- 실무에서는 IFNULL() 또는 COALESCE()로 NULL 방어를 해주는 것이 안전하다.
SELECT REPLACE(IFNULL(username, ''), 'admin_', '') FROM users;
🧠 실무에서 자주 쓰는 패턴
1. 포맷 통일화
-- 전화번호 구분자 '-' → 공백
SELECT REPLACE(phone, '-', ' ') FROM contacts;
2. 잘못 입력된 단어 정리
-- 제품명이 잘못 입력된 경우 보정
SELECT REPLACE(product_name, '갤럭시S25', '갤럭시S24') FROM products;
반응형
3. 문자열 조합 후 후처리
-- CONCAT 결과에서 특수기호 제거
SELECT REPLACE(CONCAT(title, ' - ', category), '&', 'and') FROM articles;
4. 저장된 URL 수정
-- 도메인 변경 (http → https)
UPDATE links
SET url = REPLACE(url, 'http://', 'https://')
WHERE url LIKE 'http://%';
💡 보완 팁: 중복 치환 방지
여러 번 치환할 경우, 중첩되면 원하지 않는 결과가 나올 수 있다.
-- 'aa' → 'a' 로 치환 시 주의
SELECT REPLACE('aaaa', 'aa', 'a'); -- 결과: 'aa' (2번 적용됨)
단계를 나누어 적용하거나, WHERE 조건으로 최소화하는 것이 안전하다.
🔚 마무리 요약
- REPLACE()는 간단하고 빠르게 문자열을 바꿀 수 있는 함수
- 치환 대상이 정확히 일치해야 작동
- NULL 처리, 중복 치환, 특수문자 주의 필요
- 실무에서는 전화번호, 주소, 오타 보정, 금칙어 필터 등에 자주 사용됨
🔗 참고 공식 문서
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] 반복, 역순, 공백 함수: REPEAT, REVERSE, SPACE 정리 (1) | 2025.07.19 |
|---|---|
| [MySQL] 대소문자 변환 함수: UPPER, LOWER 실습 가이드 (0) | 2025.07.19 |
| [MySQL] 문자열 공백 제거 함수: TRIM, LTRIM, RTRIM 비교 (0) | 2025.07.19 |
| [MySQL] 문자열 패딩 함수: LPAD, RPAD 예제 중심 정리 (0) | 2025.07.19 |
| [MySQL] 문자열 검색 함수: INSTR, LOCATE, POSITION 비교 (0) | 2025.07.19 |
| [MySQL] 문자열 추출 함수: LEFT, RIGHT, SUBSTRING 정리 (0) | 2025.07.19 |
| [MySQL] 문자열 연결 함수: CONCAT, CONCAT_WS 활용법 (0) | 2025.07.19 |
| [MySQL] 문자열 길이 함수: LENGTH vs CHAR_LENGTH 정리 (3) | 2025.07.19 |