본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

MySQL PAD · TRIM — 패딩·공백 제거 완전 정리

by 왕진 2026. 6. 27.
반응형

 

 

Database · MySQL

PAD · TRIM — 패딩과 공백 제거 완전 정리

LPAD·RPAD로 자릿수 맞추기 / TRIM·LTRIM·RTRIM으로 공백과 특정 문자 제거하기
시작 오늘 분석할 코드

문자열의 "길이"와 "군더더기"를 다루는 두 부류의 함수를 함께 본다. 하나는 LPAD/RPAD처럼 문자열이 짧을 때 특정 문자로 채워서 자릿수를 맞추는 함수이고, 다른 하나는 TRIM/LTRIM/RTRIM처럼 문자열 양 끝의 불필요한 공백이나 특정 문자를 걷어내는 함수다. 방향은 반대지만 둘 다 "문자열의 양 끝을 어떻게 다룰 것인가"라는 같은 질문에서 나온 함수들이다.

SELECT LPAD('이것이', 5, '##'), RPAD('이것이', 5, '##'); -- 왼쪽에서 채워서 전체 길이를 맞춤 / 오른쪽에서 채워서 전체 길이를 맞춤 SELECT LTRIM(' 이것이'), RTRIM('이것이 '); -- 왼쪽 공백 제거 / 오른쪽 공백 제거 SELECT TRIM(' 이것이 '), TRIM(BOTH 'ㅋ' FROM 'ㅋㅋㅋ재밌어요.ㅋㅋㅋ'); -- 양쪽 공백 제거 / 양쪽 특정문자 제거
실제 결과 미리보기
함수 호출 결과 비고
LPAD('이것이', 5, '##') 「##이것이」 원본 3자 + 왼쪽에 2자 채움 = 총 5자
RPAD('이것이', 5, '##') 「이것이##」 원본 3자 + 오른쪽에 2자 채움 = 총 5자
LTRIM(' 이것이') 「이것이」 왼쪽 공백 3칸만 제거, 오른쪽엔 원래 없었음
RTRIM('이것이 ') 「이것이」 오른쪽 공백 3칸만 제거
TRIM(' 이것이 ') 「이것이」 양쪽 공백 모두 제거
TRIM(BOTH 'ㅋ' FROM 'ㅋㅋㅋ재밌어요.ㅋㅋㅋ') 「재밌어요.」 공백이 아닌 지정 문자 'ㅋ'를 양쪽에서 제거
용어 용어 정리
LPADLeft PAD. 문자열 왼쪽에 지정 문자를 채워 전체 길이를 맞추는 함수
RPADRight PAD. 문자열 오른쪽에 지정 문자를 채워 전체 길이를 맞추는 함수
TRIM문자열 양쪽 끝의 공백(또는 지정 문자)을 제거하는 함수
LTRIMLeft TRIM. 문자열 왼쪽 공백만 제거
RTRIMRight TRIM. 문자열 오른쪽 공백만 제거
BOTHTRIM의 옵션 키워드. 지정한 문자를 양쪽에서 제거하겠다는 뜻
LEADINGTRIM의 옵션 키워드. 지정한 문자를 왼쪽(앞)에서만 제거
TRAILINGTRIM의 옵션 키워드. 지정한 문자를 오른쪽(뒤)에서만 제거
패딩(Padding)부족한 자릿수를 특정 문자로 채워서 정해진 길이를 맞추는 것
FROMTRIM 구문에서 "어떤 문자열을 대상으로 자를 것인가"를 지정하는 키워드

1 LPAD — 왼쪽을 채워 자릿수를 맞춘다
왜 왼쪽부터 채우는가?

회원번호, 상품코드, 시리얼번호처럼 "고정된 자릿수"가 필요한 데이터는 실무에서 아주 흔하다. 예를 들어 회원번호를 항상 5자리로 통일해서 00007, 00042처럼 보여주고 싶을 때, 원본 데이터는 7, 42처럼 자릿수가 제각각이다. 이때 LPAD(값, 목표길이, 채울문자)를 쓰면 왼쪽에 부족한 자릿수만큼 지정 문자를 채워 넣어 시각적으로 자릿수를 통일할 수 있다. 사람이 숫자를 읽을 때 "앞자리가 비어 있으면 0으로 채운다"는 관습을 그대로 SQL 함수로 옮긴 것이라고 생각하면 이해가 쉽다.

SELECT LPAD(7, 5, '0'); -- '00007' SELECT LPAD(42, 5, '0'); -- '00042' SELECT LPAD('이것이', 5, '##'); -- '##이것이'
※ 채울 문자는 한 글자가 아니어도 된다. 목표 길이에 도달할 때까지 반복해서 채우고, 남는 부분은 그만큼만 잘라서 붙인다.

2 RPAD — 오른쪽을 채워 자릿수를 맞춘다
왜 오른쪽부터 채우는가?

RPADLPAD와 정반대로 문자열 오른쪽에 지정 문자를 채운다. 숫자를 정렬할 때는 보통 왼쪽 채움(LPAD)을 쓰지만, 이름·상품명처럼 왼쪽 정렬로 표를 맞추고 싶을 때는 오른쪽 채움(RPAD)이 더 자연스럽다. 예를 들어 모니터링 콘솔이나 로그 출력에서 컬럼 폭을 고정 너비로 맞추고 싶을 때, 짧은 문자열 뒤에 공백이나 점(.)을 채워 넣으면 세로로 줄이 딱 맞아 떨어지는 표 형태를 만들 수 있다.

SELECT RPAD('사과', 6, '.'); -- '사과....' SELECT RPAD('바나나', 6, '.'); -- '바나나...'
※ 텍스트 정렬 출력용으로는 RPAD, 숫자 자릿수 맞춤용으로는 LPAD — 이렇게 역할을 나눠서 기억하면 헷갈리지 않는다.

3 목표 길이보다 원본이 길면? — 잘림 동작 주의
LPAD·RPAD는 "맞추기"만 하지 "보존"은 보장하지 않는다

LPAD·RPAD의 두 번째 인자(목표 길이)는 "최소 길이"가 아니라 "정확히 이 길이로 맞춘다"는 뜻이다. 그래서 원본 문자열이 목표 길이보다 이미 길면, 채우기는 일어나지 않고 오히려 원본이 목표 길이만큼 잘려서 반환된다. 이 동작을 모르고 사용하면 "분명 패딩만 추가했는데 데이터 뒷부분이 사라졌다"는 문제를 겪게 된다.

SELECT LPAD('안녕하세요', 3, '0'); -- '안녕하' (5자 중 앞 3자만 남고 잘림) SELECT RPAD('안녕하세요', 3, '0'); -- '안녕하' (앞 3자만 남고 잘림)
※ 목표 길이는 항상 "이 컬럼에 들어올 수 있는 데이터 중 가장 긴 값" 기준으로 넉넉하게 잡아야 한다. 그렇지 않으면 조용히 데이터가 잘려 나간다.

 

반응형

 

4 TRIM — 양쪽 공백 제거의 기본형
왜 공백을 제거해야 하는가?

사용자가 폼에 값을 입력할 때 실수로 앞뒤에 공백을 붙여 넣는 일은 매우 흔하다. ' 홍길동''홍길동'은 사람 눈에는 같아 보여도 데이터베이스 입장에서는 완전히 다른 문자열이라 WHERE name = '홍길동' 조건에 걸리지 않는다. TRIM(문자열)은 이런 "보이지 않는 오차"를 없애서 검색·비교·중복 체크를 정확하게 만들어주는 가장 기본적인 데이터 정제 함수다.

SELECT TRIM(' 이것이 '); -- '이것이' SELECT * FROM users WHERE TRIM(name) = '홍길동';
※ 회원가입·검색 폼 등 사용자 입력값을 저장하거나 비교하기 전에는 TRIM을 거치는 습관을 들이는 게 좋다.

5 LTRIM · RTRIM — 한쪽만 제거해야 할 때
왜 방향을 구분해서 제거하는가?

TRIM이 항상 정답은 아니다. 어떤 경우엔 "왼쪽 공백만" 혹은 "오른쪽 공백만" 제거해야 하는 상황이 있다. 예를 들어 오른쪽 공백은 표 정렬을 위해 일부러 넣어둔 것이라 유지하고, 왼쪽 앞부분에 실수로 들어간 공백만 지우고 싶을 때는 LTRIM을, 반대로 뒤쪽 트레일링 스페이스만 지우고 싶을 때는 RTRIM을 쓴다. 즉 TRIM이 "양쪽 다 밀어버리는 큰 빗자루"라면, LTRIM·RTRIM은 "한쪽 방향만 청소하는 정밀한 빗자루"다.

SELECT LTRIM(' 이것이'); -- '이것이' (왼쪽만 제거, 오른쪽엔 애초에 공백 없음) SELECT RTRIM('이것이 '); -- '이것이' (오른쪽만 제거)
※ LTRIM은 왼쪽 공백만 신경 쓰고 오른쪽 공백은 그대로 둔다. 반대로 RTRIM은 오른쪽만 처리한다 — 서로 간섭하지 않는다.

6 TRIM(BOTH/LEADING/TRAILING 문자 FROM 문자열) — 공백이 아닌 문자 제거
TRIM은 공백 전용이 아니다

TRIM의 진짜 힘은 "공백"이 아니라 "임의의 문자"를 지울 수 있다는 데 있다. TRIM(BOTH 'ㅋ' FROM 'ㅋㅋㅋ재밌어요.ㅋㅋㅋ')처럼 옵션 키워드(BOTH/LEADING/TRAILING)와 제거할 문자, 그리고 FROM 뒤에 대상 문자열을 지정하면 공백이 아닌 특정 문자도 양쪽·왼쪽·오른쪽에서 걷어낼 수 있다. 이 문법은 "장식성 반복 문자(ㅋㅋㅋ, ***, ---)"나 "구분자로 쓰인 문자"를 데이터 정제 단계에서 제거할 때 유용하다.

SELECT TRIM(BOTH 'ㅋ' FROM 'ㅋㅋㅋ재밌어요.ㅋㅋㅋ'); -- '재밌어요.' SELECT TRIM(LEADING '*' FROM '***공지사항***'); -- '공지사항***' SELECT TRIM(TRAILING '*' FROM '***공지사항***'); -- '***공지사항'
※ 옵션과 제거할 문자를 생략하면(TRIM(문자열)) MySQL은 기본값으로 BOTH + 공백을 적용한다. 즉 4번 섹션의 TRIM은 이 문법의 축약형이다.

7 자주 하는 실수
실수 증상 해결
LPAD/RPAD의 목표 길이를 원본보다 짧게 지정 패딩이 아니라 데이터 뒷부분이 잘려서 저장됨 목표 길이를 "들어올 수 있는 가장 긴 값" 기준으로 넉넉히 잡는다
TRIM이 공백만 지운다고 착각 BOTH/문자 지정 문법을 몰라 특수문자 제거를 별도 REPLACE로 처리 TRIM(BOTH '문자' FROM 문자열) 문법으로 한 번에 처리
LTRIM/RTRIM을 반대로 사용 지우려던 공백이 그대로 남아있음 L은 왼쪽(Left), R은 오른쪽(Right) — 이니셜 기준으로 방향 재확인
WHERE절 비교 전에 TRIM을 안 걸어줌 공백 포함 데이터가 검색·중복체크에서 누락됨 사용자 입력값 저장·비교 전 TRIM(컬럼) 습관화
LPAD 채움 문자가 여러 글자일 때 길이 계산 실수 예상보다 결과 길이가 짧거나 문자가 중간에 잘려 보임 목표 길이는 "글자 수" 기준이며 채움 문자는 필요한 만큼만 반복·절단됨을 이해

핵심 한 줄 요약

LPAD / RPAD왼쪽 / 오른쪽에 문자를 채워 지정한 길이로 맞춘다 (원본이 더 길면 잘림)
TRIM양쪽 끝의 공백(기본값) 또는 지정 문자를 제거한다
LTRIM / RTRIM왼쪽만 / 오른쪽만 공백을 제거한다
BOTH / LEADING / TRAILINGTRIM에서 제거 방향을 명시적으로 지정하는 옵션 키워드

Tags

#MySQL #LPAD #RPAD #TRIM #LTRIM #RTRIM #패딩 #공백제거 #SQL #데이터베이스 #DB #문자열함수 #MySQL함수 #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
MySQL, LPAD, RPAD, TRIM, LTRIM, RTRIM, 패딩, 공백제거, SQL, 데이터베이스, DB, 문자열함수, MySQL함수, 웹개발, 티스토리
반응형

댓글