Skip to content

Let's know LPAD logic

데이터베이스에서 저장된 데이터 형식을 일관되게 유지하거나 특정 길이로 맞추기 위해 LPAD를 사용합니다.
오늘은 LPAD의 동작 방식에 대해 알아보겠습니다.

1. LPAD 함수

LPAD는 문자열의 왼쪽에 특정 문자를 채워 지정된 길이의 문자열을 만드는 MySQL 함수입니다. 데이터 출력 형식을 일관되게 유지하거나, 숫자에 앞자리 0을 채우는 등의 용도로 매우 유용합니다.

2. 기본 구문과 매개변수

LPAD(string, length, pad_string)

각 매개변수의 의미는 다음과 같습니다.

  • string: 원본 문자열 (패딩할 대상)
  • length: 패딩 후 반환될 문자열의 전체 길이
  • pad_string: 왼쪽에 채울 문자열

3. LPAD 함수의 작동 방식

LPAD 함수는 다음과 같은 로직으로 작동합니다.

  • 원본 문자열이 지정된 길이보다 짧은 경우에는 원본 문자열의 왼쪽에 패딩 문자열을 추가하여 지정된 길이를 맞춥니다.
  • 원본 문자열이 지정된 길이보다 길거나 같은 경우에는 원본 문자열을 오른쪽부터 잘라서 지정된 길이를 맞춥니다.
  • 인자 중 하나라도 NULL이면 결과는 NULL을 반환합니다.

4. 사용 예시

1. 숫자에 앞자리 0 채우기

-- 결과: '00123'
SELECT LPAD('123', 5, '0');

2. 문자열 왼쪽에 특정 문자 채우기

-- 결과: '*****Hello'
SELECT LPAD('Hello', 10, '*');

3. 복합 문자를 사용한 패딩

-- 결과: 'xyxabc'
SELECT LPAD('abc', 6, 'xy');

4. 테이블 열 데이터 패딩

SELECT LPAD(account_number, 10, '*') AS padded_account
FROM accounts;

5. 데이터 타입 변환 특성

LPAD 함수에서 흥미로운 점은 다음과 같은 처리방식을 통해 pad_string 파라미터에 숫자가 들어가든 문자가 들어가든 결과가 항상 문자열로 나온다는 것입니다.

1. 문자열 함수의 특성

LPAD는 기본적으로 문자열 조작 함수이기 때문에 입력값과 출력값 모두 문자열로 처리합니다.

2. 묵시적 타입 변환

MySQL은 함수 매개변수에 제공된 값이 예상 데이터 타입과 일치하지 않을 경우 자동으로 적절한 타입으로 변환합니다.

-- 결과: '00123'
SELECT LPAD(123, 5, 0);

위 쿼리에서 숫자 0은 문자 '0'으로 자동 변환됩니다.

3. 반환 타입의 일관성

MySQL에서 LPAD 함수의 반환 타입은 항상 문자열(VARCHAR 또는 해당 문자셋의 문자열 타입)로 정의되어 있어 함수의 일관성을 유지합니다.

6. 활용 사례

LPAD 함수는 다음과 같은 상황에서 유용합니다.

  • 데이터 정렬 및 표시: 텍스트 정렬이나 보고서 작성 시 균일한 너비로 데이터를 표시할 수 있습니다.

  • 코드 번호 형식 맞추기: 상품 코드나 주문 번호 등을 일정한 자릿수로 표현 가능합니다.

SELECT LPAD(order_id, 8, '0') AS formatted_order_id FROM orders;
  • 계층적 데이터 표현: 들여쓰기를 통해 계층 구조를 시각화할 수 있습니다.
SELECT LPAD(' ', 2*depth, ' ') || category_name FROM categories;
  • 데이터 마스킹: 민감한 정보의 일부를 가리는 데 활용됩니다.
SELECT LPAD(RIGHT(credit_card, 4), LENGTH(credit_card), '*') FROM payments;

7. 주의사항

이렇게 편리한 함수인 LPAD를 사용할 때에도 주의사항이 있습니다.

  • 만약 원본 문자열이 지정된 길이보다 길 경우, 문자열은 오른쪽부터 잘립니다.
  • MySQL 4.0 버전부터 사용 가능합니다.
  • 문자 인코딩에 따라 결과가 달라질 수 있으므로 주의해야 합니다.