데이터베이스에서 함수는 단일 행 함수와 다중 행 함수가 있습니다.
단일 행 함수는 말 그대로 함수내에 단일 행이 들어가는 함수인데요.
쉽게 말해 하나의 컬럼에만 명령한다고 할 수 있습니다.
함수는 중첩해서 사용할수 있습니다.
수학에서 괄호()안의 식을 먼저 계산하는것과 비슷합니다. 가장 안쪽에 있는 함수부터 식을 적용합니다.
주요 단일 행 함수는 다음과 같이 있습니다.
그중에서도 이번 포스팅에서는 문자 함수를 중점으로 보려합니다.
앞선 포스팅에서 출력 결과가 모양이 예쁘지 않아서 페이지 사이즈와 라인 사이즈를 바꾸어 두겠습니다.
SET PAGESIZE 300;
SET LINESIZE 300;
1. LPAD/RPAD
LPAD / RPAD (컬럼명, 길이, 값)
- 해당 컬럼을 길이만큼 오른쪽/왼쪽 정렬한다.
- 빈 공간은 값을 채운다.
--Q1) 빈 자리에는 *을 넣어서 7자리만큼 오른쪽 정렬하자.
SELECT LPAD(ENAME,7,'*') FROM EMP;
분명 정렬이라고 했는데 LPAD드가 오른쪽 정렬입니다.
출력 결과를 보면 왜 그런지 알수 있습니다.
ENAME의 길이를 7로 정해주고 왼쪽에 빈자리에 값을 넣게 됩니다.
만약 ‘*’이 아니라 ‘ ‘와 같은 공백을 넣으면 정렬이 되겠지요?
--Q2) 빈 자리에는 *을 넣어서 10자리만큼 왼쪽
SELECT RPAD(ENAME,10,'*') FROM EMP;
RPAD도 마찬가지입니다.
해당 명령은 길이를 10으로 주고 오른쪽 비어있는 공간에 값을 넣어줍니다.
마찬가지로 ‘*’ 대신 ‘ ‘ 을 넣으주면 정렬이 잘 됩니다.
2. LTRIM / RTRIM
LTRIM / RTRIM (‘문자열’,’제거할 문자(열)’)
문자열 제거. 패턴으로 제거가 아님!
--Q3) ‘xyxzyyTech6 327’ 의 왼쪽에서 xyz를 제거하자.
--Q4) ‘xyxzyyTech6 327’ 의 오른쪽에서 숫자를 제거하자.
--Q5) ‘xyxzyyTech6 327’ 의 오른쪽에서 공백 및 숫자를 제거하자
SELECT LTRIM(‘xyxzyyTech6 327’, ‘xyz’) AS “Q1”,
RTRIM(‘xyxzyyTech6 327’, ‘0123456789’) AS “Q2”,
RTRIM(‘xyxzyyTech6 327’, ‘ 0123456789’) AS “Q3” FROM DUAL;
수월한 비교를 위해 한번에 출력하였습니다.
마지막 FROM DUAL;의 경우는 테이블에서 읽어오는 것이 아니라 내가 입력한 명령을 보보고 할 때 사용합니다.
Q3)설명
LTRIM의 경우 괄호 안에 (‘문자열’, ‘제거할문자열’)을 넣습니다.
그렇게 되면 문자열의 왼쪽부터 제거할문자열을 제거해 나갑니다.
이때 제거할 문자열 안에 들어있는 문자는 각각 개별로 구분합니다.
xyz가 제거할 문자라면 x나 y나 z를 모두 제거합니다.
순서대로 제거를 하다가 제거할 문자열 이외의 문자를 만나면 종료됩니다.
Q4)설명
RTRIM의 경우 LTRIM과 같은 방식이지만 오른쪽부터 문자를 제거해 나갑니다.
Q4에서는 제거할문자열이 0~9까지의 숫자이므로 모든 숫자를 차례대로 제거하고 숫자 이외의 문자를 만나면 종료합니다.
Q5)설명
Q4와 동일합니다. 다만 Q5에는 공백이 포함되어있습니다. 공백도 문자열로 받아들여 제거할수 있습니다.
3. TRIM
- TRIM(‘제거할 문자 하나’ FROM ‘문자열’)
- 양쪽 모두 제거
--Q6) ‘xyxzyyTech6 327xx’ 에서 양쪽의 x를 제거하자.
SELECT TRIM(‘x’ FROM ‘xyxzyyTech6 327xx’) FROM DUAL;
TRIM의 경우는 양쪽 문자열을 제거하지만 제거할 문자열 하나만 입력이 가능합니다.
--Q7) ‘xyxzyyTech6 327xx’ 에서 양쪽의 xy를 제거하자.
SELECT TRIM(‘xy’ FROM ‘xyxzyyTech6 327xx’) FROM DUAL;
두개 이상의 문자열을 입력하면 트림 세트에는 하나의 문자만 있어야 한다는 에러 문구가 발생합니다.( trim set should have only one character)
'RDB > Oracle' 카테고리의 다른 글
[ORACLE] 자리수 반올림, 올림, 버림(ROUND, TRUNC, CEIL, FLOOR) (0) | 2021.12.26 |
---|---|
[ORACLE] 문자열 자르기, 해당문자 인덱스 반환(SUBSTR, INSTR) (0) | 2021.12.24 |
[ORACLE] DCL - 데이터 제어어 (0) | 2021.12.22 |
[ORACLE] DDL - 데이터 정의어 (0) | 2021.12.21 |
[ORACLE] DML - 데이터 조작어 (0) | 2021.12.20 |