본문 바로가기

배우기/복습노트[oracle sql]

[복습] SQL | Oracle 문자 함수: 문자열 삽입 함수(lpad, rpad), 문자열 삭제 함수(trim, ltrim, rtrim)

728x90
반응형

문자열 삽입 함수로 lpad, rpad가 있다.

활용 예시를 보면 아래와 같다.

abcd라는 네 글자의 단어 길이를 10길이로 만들고 그 빈 공간을 *로 채워서 총 10길이로 만들 수 있다.

lpad는 왼쪽, rpad는 오른쪽 공간을 채우게 된다.

잘 쓰지 않는 기능이나, 주로 줄맞추기 할 때 사용된다.

orange에서는 공백과 영문 글자 사이즈가 달라 정렬이 잘 보이지 않으므로 cmd 창에서 실습해보면 아래와 같다.

orange에서는 위와 같이 오른쪽 정렬이 잘 보이지 않고,

이렇게 cmd에서 보면 오른쪽 정렬이 되어있다.

이렇게 왼쪽정렬, 오른쪽 정렬할 때 사용하기도 하나 ★다음 활용 예시가 매우 중요하다.

 

예를들어 

년: 2018

월: 2

일: 1

인 자료가 있다고 하자.

이 자료를 || 를 사용하여 붙이게 되면 201821 이라는 형태의 날짜가 된다.

그러나 우리가 보통 처리하는 날짜는 20180201의 형태이므로 한 자리의 월, 일을 두 자리로 변환할 때 사용하게 된다.

★년||lpad(월, 2, 0)||lpad(일, 2, 0)★ 이 형식은 날짜 배우는 때에 많이 사용하게 될 것이다.

 

 

문자열 삭제 함수로는  trim(양 방향에서 제거),  ltrim(왼쪽에서 제거),  rtrim(오른쪽에서 제거)가 있다.

ltrim(원본대상[, 삭제문자열]),

rtrim(원본대상[, 삭제문자열]),

trim(원본대상)

의 형태로 쓸 수 있으며, ltrim과 rtrim 은 삭제문자열 생략 시 공백을 제거한다.

trim의 경우에는 삭제 문자열을 전달할 수 없으며 양 방향의 공백을 제거한다.

말 그대로 양 방향의 공백만을 제거하기 때문에 중간 공백은 삭제할 수 없으며  이 점이 trim 함수의 단점이다.

 

위 내용처럼 왼쪽 a를 제거하다가 삭제 대상이 아닌 대상을 만나면 삭제 행위를 중단하므로 가운데 끼어있는  a 는 그대로 남는다.

 

★공백 제거의 중요성을 잠시 정리해보자.

현업에서 크게 실수하는 부분 중 하나가 공백이 있는 데이터의 처리이다.

관리가 잘 되어있지 않은 데이터는 앞뒤 공백이 있을 수 있다. 'nara5'와 'nara5 '의 데이터는 다르다.

즉, 저장된 문자열에 공백을 포함하는 경우 원하는 데이터 추출이 불가능할 수 있다.

 

위에 언급한 내용을 테스트해보자.

char(10)은 고정형 데이터 타입 10바이트이므로 따라서 어떤 데이터가 들어가더라도 항상 10바이트를 고정시킨다.

즉 무조건 할당된 컬럼 사이즈만큼 저장하며 그 뒤에 공백을 삽입한다.

varchar는 가변형 데이터 타입이므로 입력된 길이만큼 저장한다.

위와 같이 결과가 trim 함수 하나로 조회가 되지 않거나 조회가 된다.

길이를 살펴보면 아래와 같다.

 

이렇게 길이가 다른 것을 확인할 수 있다. 

눈에 보이는 데이터만을 그대로 믿어서는 안될 일이다.

728x90
반응형