반응형
사용자 입력값이나 텍스트 데이터를 다룰 때 앞뒤에 붙은 불필요한 공백은 종종 문제를 일으킨다.
특히 JOIN이나 WHERE 절 조건에서 공백이 숨어 있으면 값이 일치하지 않아 오류로 이어지기도 한다.
이런 문제를 해결하기 위해 MySQL은 공백 제거용 함수들을 제공한다: TRIM(), LTRIM(), RTRIM()

🧽 TRIM(): 양쪽 공백 제거
문법
TRIM([LEADING|TRAILING|BOTH] trim_str FROM str)
-- 또는 단순히 공백 제거 시
TRIM(str)
공백뿐 아니라 특정 문자도 제거할 수 있다.
가장 많이 쓰는 형태는 TRIM(str)로, 문자열 앞뒤 공백을 동시에 제거한다.
예제
SELECT TRIM(' hello '); -- 결과: 'hello'
SELECT TRIM(BOTH 'x' FROM 'xxhelloxx'); -- 결과: 'hello'
SELECT TRIM(LEADING 'x' FROM 'xxhellox'); -- 결과: 'hellox'
SELECT TRIM(TRAILING 'x' FROM 'helloxx'); -- 결과: 'hello'
실무에서는 대부분 TRIM() 단독으로 사용해 공백 제거용으로 쓰인다.
반응형
🔸 LTRIM(): 왼쪽 공백 제거
문법
LTRIM(str)
문자열의 **왼쪽(시작 부분)**에 붙은 공백만 제거한다.
예제
SELECT LTRIM(' hello world'); -- 결과: 'hello world'
🔸 RTRIM(): 오른쪽 공백 제거
문법
RTRIM(str)
문자열의 **오른쪽(끝 부분)**에 붙은 공백만 제거한다.
예제
SELECT RTRIM('hello world '); -- 결과: 'hello world'
LTRIM과 RTRIM은 부분적으로만 공백을 다뤄야 할 때 유용하다.
🧠 세 함수 비교 요약
| 함수명 | 제거 방향 | 사용 예시 | 주요 용도 |
| TRIM | 양쪽 | TRIM(' abc ') → 'abc' | 전체 공백 제거 |
| LTRIM | 왼쪽만 | LTRIM(' abc') → 'abc' | 앞쪽 공백만 제거 |
| RTRIM | 오른쪽만 | RTRIM('abc ') → 'abc' | 뒷쪽 공백만 제거 |
반응형
⚠️ 주의사항
- 공백이 아닌 특정 문자 제거 시에는 TRIM('문자' FROM 문자열) 형식을 써야 한다.
- 공백이 아닌 문자를 제거할 때도 방향 지정 가능
- NULL 입력 시 결과는 NULL
예외
SELECT TRIM(NULL); -- 결과: NULL
SELECT LTRIM(NULL); -- 결과: NULL
🛠️ 실무 예제
1. 사용자 이름 입력값 정리
SELECT TRIM(user_name) FROM users;
2. 주소 정보에서 특정 기호 제거
SELECT TRIM(',' FROM address) FROM customer_info;
3. 입력 전처리 후 비교
-- 공백 있는 이름과 공백 없는 이름 비교
SELECT * FROM users
WHERE TRIM(user_name) = '홍길동';
4. 데이터 적재 전 후처리
-- 로딩 전 데이터 정리
UPDATE temp_table
SET col1 = TRIM(col1),
col2 = TRIM(col2);
🧩 보완 팁
- 데이터가 외부에서 유입되는 경우 공백이 포함될 확률이 높다.
- 특히 CSV, Excel, 사용자 입력 등에서 앞뒤 공백은 매우 흔하다.
- 정규화를 위해 INSERT, UPDATE 전에 TRIM() 적용하는 습관이 중요하다.
🔗 참고 공식 문서
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html
반응형
'DB' 카테고리의 다른 글
| [MySQL] 고급 문자열 함수: FIELD, ELT, FIND_IN_SET 정리 (1) | 2025.07.19 |
|---|---|
| [MySQL] 문자열 인코딩과 포맷 함수: CHAR, ASCII, HEX 등 총정리 (0) | 2025.07.19 |
| [MySQL] 반복, 역순, 공백 함수: REPEAT, REVERSE, SPACE 정리 (1) | 2025.07.19 |
| [MySQL] 대소문자 변환 함수: UPPER, LOWER 실습 가이드 (0) | 2025.07.19 |
| [MySQL] 문자열 패딩 함수: LPAD, RPAD 예제 중심 정리 (0) | 2025.07.19 |
| [MySQL] 문자열 치환 함수: REPLACE 실무 활용법 (1) | 2025.07.19 |
| [MySQL] 문자열 검색 함수: INSTR, LOCATE, POSITION 비교 (0) | 2025.07.19 |
| [MySQL] 문자열 추출 함수: LEFT, RIGHT, SUBSTRING 정리 (0) | 2025.07.19 |