Dev/SQL

[오라클 SQL] LPAD/RPAD 공백 채우기, 자릿수 채우기

Aloner 2022. 7. 8. 13:59
728x90
반응형

PK 같은 컬럼에 숫자로만 된 데이터를 1씩 증가 시켜 삽입하는 방법은 MAX 함수를 사용하여 간편하게 할 수 있습니다.

하지만 'AA001'과 같은 문자와 숫자가 같이 있는 컬럼의 경우엔 MAX함수만으론 구현이 불가합니다.

AA와 001을 나누어 MAX(001)을 해도 이것을 1로 반환하기 때문에 나중에 합치고 보면 'AA1' 이런 식으로 나오기 때문이죠

해당 테이블로 테스트를 해보면

SELECT SUBSTR(MAX(TXT),0,2)||(SUBSTR(MAX(TXT),3)+1) FROM TEST;

이처럼 AA와 003을 분리했을 때 +1을 하면 003이 004가 아닌 4로 바뀌기 때문에 숫자 시퀀스가 아닌 문자와 숫자가 혼합된 시퀀스의 경우 LPAD함수를 사용하여 문제를 해결할 수 있습니다.

SELECT SUBSTR(MAX(TXT),0,2)||LPAD(SUBSTR(MAX(TXT),3)+1,3,0) FROM TEST;

 

LPAD

LPAD함수는 특정 자리수 만큼 특정 문자로 값을 제외한 자리를 채워주는 함수 입니다.

파라미터는 총 3개로 LPAD(A, 5, C) 라고 하면 A값을 5자리를 확보한 후 남는 공간을 왼쪽부터 C로 채우는 함수입니다.

SELECT
    '531',
    LPAD('531',5,0),
    LPAD('531',7,'A')
FROM DUAL;

코드와 결과를 보시면 이해하기 편할 겁니다.

531이라는 숫자를 5자리로 공간을 확보한 뒤 남는 공간만큼 왼쪽부터 0으로 채우기 때문에 00531이 됩니다.

세 번째 컬럼은 531이라는 숫자를 7자리로 공간을 확보한 뒤 왼쪽부터 A로 채우기 때문에 AAAA531이 됩니다.

 

RPAD

RPAD는 LPAD와 반대로 문자를 채우는 것을 오른쪽에서 부터 시작하는 함수 입니다.

SELECT
    '531',
    RPAD('531',5,0),
    RPAD('531',7,'A')
FROM DUAL;

 

728x90
반응형