본문 바로가기
Database/MySQL

[MySQL][MariaDB] LPAD, RPAD 함수가 뭐야?

by Devyne 2025. 7. 1.
반응형

 

그룹 테이블에서 GROUP_ID가 PK에 해당한다. 

이 GROUP_ID의 포맷이 GR00X (GR + 숫자3자리) 이렇게 정해져있다. 

 

그룹 등록 시 다음 GROUP_ID를 쿼리해서 조회한 후 이를 그룹 정보와 같이 INSERT 한다. 

 

다음 GRUOP_ID를 조회하는 쿼리를 한 번 보자. 

 

SELECT CONCAT('GR', LPAD(CAST(IFNULL(MAX(SUBSTR(GROUP_ID, 3)), 0) AS UNSIGNED) + 1, 3, 0)) group_id
FROM GROUP_INFO
WHERE GROUP_ID LIKE CONCAT( 'GR', '%')

 

쿼리를 괄호 제일 안쪽부터 보자. 

 

SUBSTR(GROUP_ID, 3) 

 

SUBSTR은 문자열 컬럼에서 원하는 길이로 문자열을 추출하는 함수이다. 

해당 쿼리를 보면 GROUP_ID에서 3번째 자리부터 끝까지 문자열을 추출한다는 것이다. 

 

앞에서 얘기했다싶이 GROUP_ID은 GR 다음으로 숫자 3자리가 위치한다. 

즉, SUBSTR(GROUP_ID, 3)은 숫자 3자리를 추출한다는 것이다. 

다음을 보자. 

 

MAX(SUBSTR(GROUP_ID, 3)) 

 

MAX 함수를 통해 숫자가 가장 큰 거만 조회하겠다는 거다. 

만약 001, 002, 003 이렇게 있다면 003을 조회하겠다는 거!

 

IFNULL(MAX(SUBSTR(GROUP_ID, 3)), 0) 

 

만약 그룹 테이블에 아무 데이터가 없을 경우 정확히 GROUP_ID 데이터가 없는 경우

0으로 조회하겠다는 거다. GROUP_ID 값이 있으면 그 중 가장 큰 값을 조회하겠다는 거!

 

CAST(IFNULL(MAX(SUBSTR(GROUP_ID, 3)), 0) AS UNSIGNED + 1

 

CAST 함수를 통해 UNSIGNED 타입으로 변환했다. UNSIGNED 타입은 양수만 표현하고 싶을 때 이를 설정한다.

우리의 얻고자 하는 것을 다시 생각해보자. 우리는 지금 다음 GROUP_ID를 조회하고자 한다. 

그렇기 때문에 GROUP_ID가 가장 큰 값을 조회한 후 여기에 1을 더한 값이 바로 다음 GROUP_ID가 될 것이다. 

 

LPAD(CAST(IFNULL(MAX(SUBSTR(GROUP_ID, 3)), 0) AS UNSIGNED) + 1, 3, 0)

 

여기서 LPAD 함수가 사용되었다. 

이에 대해서 자세히 알고 싶어서 포스팅을 작성하기로 했다. 


LPAD가 뭐야? 

LPAD함수는 특정 문자를 포함한 자리수를 정한 후 특정 문자 왼쪽으로 문자를 채우는 함수이다. 

 

엉? 이게 뭔 말이야. 

 

여기서 3가지 키워드를 한번 보자. 

 

'특정문자', '자리수', '문자를 채워' 

 

LPAD(CAST(IFNULL(MAX(SUBSTR(GROUP_ID, 3)), 0) AS UNSIGNED) + 1, 3, 0)

 

여기서 특정 문자는 CAST(IFNULL(MAX(SUBSTR(GROUP_ID, 3)), 0) AS UNSIGNED) + 1 이거다. 

CAST 된 값이 1이라고 하자. 

 

LPAD(1, 3, 0)

 

가운데 있는 3은 자리수를 얘기한다. 

그러면 1(특정문자)을 포함한 3자리. 

 

마지막 0은 특정문자 왼쪽에 채울 문자를 말한다. 

 

아아 그러면 이거를 다시 풀어서 얘기해보자. 

LPAD(CAST(IFNULL(MAX(SUBSTR(GROUP_ID, 3)), 0) AS UNSIGNED) + 1, 3, 0)

 

CAST 어쩌구 왼쪽으로 0을 채울 건데 CAST 어쩌구 포함해서 3자리만큼 채울거야. 

CAST 어쩌구 값이 1이라면 LPAD 결과값은 001이 될것이다.


전체 쿼리를 다시 보자

LPAD 값이 001로 나왔다 하자.

CONCAT 함수는 문자열을 합치는 함수다. CONCAT('GR', '001') 이면 GR001로 출력될 것이다.

이로써 다음 그룹ID을 얻을 수 있다. 

 

LPAD 함수를 알아보기 위해 이렇게 예시를 들어 얘기해보았다. 

 

RPAD 함수는 LPAD함수에 반대로 오른쪽에 문자를 채운다는 것이다. 

예시를 보면 RPAD함수도 쉽게 이해할 수 있을 것이다. 

 

 

반응형