MySQL에서 숫자 데이터 앞에 하이픈(-)으로 구분된 0(zero padding)을 붙여야 하는 경우가 종종 있습니다. 예를 들어 일련번호를 '000-100'과 같은 형식으로 표시하고 싶을 때가 그렇습니다. 이 글에서는 CONCAT() 함수와 RIGHT() 함수를 조합하여 이러한 형식을 손쉽게 만드는 방법을 알아보겠습니다.
1. 예제 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다.
mysql> create table DemoTable829(SerialNumber int); Query OK, 0 rows affected (0.64 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable829 values(100); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable829 values(101); Query OK, 1 row affected (0.26 sec) mysql> insert into DemoTable829 values(102); Query OK, 1 row affected (0.08 sec) mysql> insert into DemoTable829 values(103); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable829 values(104); Query OK, 1 row affected (0.60 sec)
3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable829;
실행 결과는 다음과 같습니다.
+--------------+ | SerialNumber | +--------------+ | 100 | | 101 | | 102 | | 103 | | 104 | +--------------+ 5 rows in set (0.00 sec)
4. 하이픈으로 구분된 0 패딩 적용하기
이제 핵심인 쿼리입니다. CONCAT()으로 접두어 '000-'을 붙인 뒤, RIGHT() 함수로 오른쪽 7자리만 잘라내면 원하는 형식이 완성됩니다.
mysql> select RIGHT(CONCAT('000-', SerialNumber), 7) from DemoTable829;결과는 아래와 같습니다.
+----------------------------------------+
| RIGHT(CONCAT('000-', SerialNumber), 7) |
+----------------------------------------+
| 000-100 |
| 000-101 |
| 000-102 |
| 000-103 |
| 000-104 |
+----------------------------------------+
5 rows in set (0.00 sec)동작 원리
이 방식은 두 단계로 동작합니다.
① CONCAT('000-', SerialNumber) → 문자열 '000-100'처럼 접두어가 붙은 값을 생성합니다.
② RIGHT(..., 7) → 전체 문자열에서 오른쪽 7글자만 추출하여 고정된 길이의 결과를 보장합니다.
참고: LPAD()를 활용한 대안
하이픈 없이 단순히 앞자리를 0으로 채우고 싶다면 LPAD() 함수를 사용하는 것이 더 간단합니다.
mysql> select LPAD(SerialNumber, 6, '0') from DemoTable829; -- 결과: 000100, 000101, ...
또한 하이픈 위치가 고정되어 있다면 위의 RIGHT(CONCAT(...)) 방식이 유용하고, 자릿수가 가변적인 데이터라면 INSERT()나 SUBSTRING() 등을 조합해 응용할 수 있습니다.