오라클에서 공백제거를 할 때 쓰이는 함수는 TRIM, LTRIM, RTRIM이 있다. 그 중 가장 많이 쓰이는게 TRIM함수
(내 기준..)
각 함수는 다음과 같은 기능을 한다.
1. TRIM : 문자열의 양측 공백을 제거하는 기능을 제공
2. LTRIM : 좌측의 공백을 제거 + 반복되는 문자 또는 특정문자를 제거하는 기능을 제공
3. RTRIM : 좌측의 공백을 제거 + 반복되는 문자 또는 특정문자를 제거하는 기능을 제공
직접 한번씩 쿼리문을 작성하면서 이해 해보도록 하자.
TRIM 함수
TRIM함수는 양측의 공백(스페이스바)를 제거한다.
기본문법
TRIM('문자열')
SELECT TRIM([문자열 컬럼]) FROM [테이블]
샘플 쿼리문
-- 오늘도 DUAL 임시테이블을 사용하도록 하자.
-- 공백제거를 하지 않고 LENGTH함수를 사용하여 공백을 포함하여 길이를 SELECT함
SELECT * FROM (
-- 좌우 공백 2개를 포함한 길이 : 9
SELECT LENGTH(' 고급_츄르츄르 ') AS "길이" from DUAL UNION ALL
-- 우측 공백 1개를 포함한 길이 : 4
SELECT LENGTH('열빙어 ') AS "길이" from DUAL UNION ALL
-- 우측 공백 1개를 포함한 길이 : 8
SELECT LENGTH('Kanagan ') AS "길이" from DUAL
);
-- TRIM함수을 사용하여 공백을 제거후 LENGTH함수로 감싸 공백을 제거한 길이를 SELECT함
SELECT * FROM (
-- 좌우 공백 2개를 제거한 길이 : 7
SELECT LENGTH(TRIM(' 고급_츄르츄르 ')) AS "길이" from DUAL UNION ALL
-- 우측 공백 1개를 제거한 길이 : 3
SELECT LENGTH(TRIM('열빙어 ')) AS "길이" from DUAL UNION ALL
-- 우측 공백 1개를 제거한 길이 : 7
SELECT LENGTH(TRIM('Kanagan ')) AS "길이" from DUAL
);
LRTIM 함수
LTRIM함수는 좌측의 공백(스페이스바)를 모두 제거하고, 2번째 인자로 [제거 할 문자열]을 넣으면
좌측에 해당 문자열과 같은 모든 문자열을 제거한다. 단 우측의 문자열을 제거되지 않는다.
기본문법
LTRIM('문자열')
-- 좌측 공백 제거
SELECT LTRIM([문자열 컬럼]) FROM [테이블]
-- 좌측 공백 제거 + 특정 문자 제거
SELECT LTRIM([문자열 컬럼], '제거할 문자열') FROM [테이블]
샘플 쿼리문
-- 좌측 공백 및 특정문자 제거
SELECT * FROM (
-- 좌측 공백 1개만 제거한 길이 : 8
SELECT LENGTH(LTRIM(' 고급_츄르츄르 ')) AS "길이" from DUAL UNION ALL
-- 좌측에 공백이 없으므로 우측 공백을 포함한 길이 : 4
SELECT LENGTH(LTRIM('열빙어 ')) AS "길이" from DUAL UNION ALL
-- 좌측에 공백이 없으므로 우측 공백을 포함한 길이 : 8
SELECT LENGTH(LTRIM('Kanagan ')) AS "길이" from DUAL UNION ALL
-- 좌측 '카'만 제거하고 우측 '카' + 공백을 포함한 길이 : 11
SELECT LENGTH(LTRIM('카카KKKanagan카 ', '카')) AS "길이" from DUAL
);
-- LTRIM함수에 2번째 인자 '카'를 넣으니 좌측의 '카'는 모두 제거 된다. 단 우측의 '카'는 제거되지 않음
-- 결과 : KKKanagan카
SELECT LTRIM('카카KKKanagan카 ', '카') AS "길이" from DUAL;
RTRIM 함수
RTRIM함수는 우측의 공백(스페이스바)를 모두 제거하고, 2번째 인자로 [제거 할 문자열]을 넣으면
우측에 해당 문자열과 같은 모든 문자열을 제거한다. 단 좌측의 문자열을 제거되지 않는다.
기본문법
RTRIM('문자열')
-- 우측 공백 제거
SELECT RTRIM([문자열 컬럼]) FROM [테이블]
-- 우측 공백 제거 + 특정 문자 제거
SELECT RTRIM([문자열 컬럼], '제거할 문자열') FROM [테이블]
샘플 쿼리문
-- 우측 공백 및 특정문자 제거
SELECT * FROM (
-- 우측 공백 1개만 제거한 길이 : 8
SELECT LENGTH(RTRIM(' 고급_츄르츄르 ')) AS "길이" from DUAL UNION ALL
-- 우측 공백 1개를 제거한 길이 : 3
SELECT LENGTH(RTRIM('열빙어 ')) AS "길이" from DUAL UNION ALL
-- 우측 공백 1개를 제거한 길이 : 7
SELECT LENGTH(RTRIM('Kanagan ')) AS "길이" from DUAL UNION ALL
-- 우측 '카'만 제거하고 좌측 '카' + 공백을 포함한 길이 : 11
SELECT LENGTH(RTRIM('카카KKKanagan카', '카')) AS "길이" from DUAL
);
-- 결과 : 카카KKKanagan
SELECT RTRIM('카카KKKanagan카', '카') AS "길이" from DUAL;
근데 여기서 주의할 게 있다. LTRIM이나 RTRIM에서 2번째 인자를 넣으면 특정문자를 제거하게 되는데
이때 그 특정문자는 맨 좌측 또는 우측을 의미하며, 공백은 제거 되지 않는다.
-- 결과 : 카카KKKanagan카
SELECT RTRIM('카카KKKanagan카 ', '카') AS "길이" from DUAL;
-- 길이 : 14
SELECT LENGTH(RTRIM('카카KKKanagan카 ', '카')) AS "길이" from DUAL;
-- 결과 : 카카KKKanagan카
SELECT RTRIM('카카KKKanagan카 카카카', '카') AS "길이" from DUAL;
-- 길이 : 14
SELECT LENGTH(RTRIM('카카KKKanagan카 ', '카')) AS "길이" from DUAL;
첫번째 쿼리 : 가장 우측이 공백으로 끝나지만 '카'라는 단어가 없어 공백이 제거 되지 않는다. => 길이 14
두번째 쿼리 : 가장 우측이 '카카카'로 끝이나, '카카카'가 제거되지만, 우측의 공백은 제거 되지 않는다. => 길이 14
처음에는 공백이든 특정문자든 그냥 싹 다 제거되는지 알았는데, 그게 아니었다.
이런 특이점을 이해하고 필요할 때 사용하도록 하자.
'데이터베이스 > Oracle' 카테고리의 다른 글
[Oracle] ORA-01790: expression must have same datatype as corresponding expression 에러 (0) | 2022.07.09 |
---|---|
[Oracle] 오라클 SUBSTR, SUBSTRB 함수를 사용하여 문자열 자르기 (0) | 2022.07.09 |
[Oracle] 오라클 SYSDATE를 통한 오늘 날짜 가져오기 / 날짜포맷 및 문자열 변환 (0) | 2022.07.04 |
[Oracle] 오라클 프로시저(Procedure) 생성 및 사용방법 ( DBeaver 활용 ) (0) | 2022.06.03 |
[Oracle] 프로시저 호출 에러 ( SQL Error [900] [42000]: ORA-00900: invalid SQL statement ) (0) | 2022.06.03 |