오라클SQL 문자와 숫자 함수

Updated:

문자 숫자 함수

학습 주제

  • 문자함수 사용하기
  • 숫자함수 사용하기

학습 목표

  • 문자함수를 이용한 데이터 처리작업을 할 수 있다.
  • 숫자함수를 이용한 데이터 처리작업을 할 수 있다.

문자함수 사용하기

함수는 동작하는 방식에 따라 크게 3가지 나뉜다.

  • 줄마다 처리할 수 있는 함수 단일행 함수
  • 여러 개의 데이터를 가지고 집계를 계산하는 그룹 함수
  • SELECT된 결과를 함수로 다시 한 번 더 분석하는 윈도우 함수

이렇게 3가지가 있다. 이번 시간은 단일행 함수를 알아본다.

단일 행 함수

  • 데이터 조작을 위해 사용한다.
  • 인자(Argument)를 이용해 작업 수행 후 결과를 반환한다.
  • 행당 하나의 결과를 반환한다.
  • SELECT, WHERE, ORDER BY 절에 사용할 수 있다.
  • 중첩사용이 가능하다.

단일 행 함수의 종류

  • 문자 함수 - 문자를 입력하면 문자 또는 숫자 값을 반환한다.
  • 숫자 함수 - 숫자를 입력하면 숫자 값을 반환한다.
  • 날짜 함수 - 날짜 유형의 값을 연산한다.
  • 변환 함수 - 데이터 유형을 변환한다.
  • 기타 함수 - 타입에 상관없이 적용이 가능하다.
함수 내용
LOWER 대상 문자열을 모두 소문자로 변환한다.
UPPER 모든 문자를 대문자로 변경한다.
INITCAP 문자열 단어의 첫 문자는 대문자 나머지는 소문자로 변경한다.
CONCAT(s1, s2) 두 문자열을 연결한다.
SUBSTR(s, m, n) 문자열 s를 m부터 길이n 만큼 문자열을 추출한다.
LENGTH(s) 문자의 길이를 숫자 값으로 표시한다.
CHR(n) ASCII 코드값이 n인 문자 변환한다.
ASCII(s) S문자의 ASCII코드값 변환한다.

예시

SELECT ename, job LOWER(job), INITCAP(job)
FROM emp
WHERE deptno = 10;

--CONCAT은 ||로 대신 사용할 수 있다.
SELECT empno,ename, job, CONCAT(ename, job) 결과 
FROM emp
WHERE deptno = 10;

SELECT empno, ename, job, sal, deptno
FROM emp
WHERE SUBSTR(ename, 1, 1) > 'K';

SELECT empno, ename, length(ename), sal
FROM emp
WHERE deptno = 20;

SELECT ename, SUBSTR(ename, 1, 3)
FROM emp
WHERE deptno = 20;

문자함수2

함수 내용
LPAD(s1, n, s2) s1문자열을 n글자 수 만큼 만들려고 할 때, s2를 왼쪽에 붙여서 만든다.
RPAD(s1, n, s2) s1문자열을 n글자 수 만큼 만들려고 할 때, s2를 오른쪽에 붙여서 만든다.
LTRIM(s, c) 대상 문자열(s)에 c라는 문자가 왼쪽에 나타나면 제거한다.
RTRIM(s, c) 대상 문자열(s)에 c라는 문자가 오른쪽에 나타나면 제거한다.
TRIM 필드 문자 앞 뒤에 나오는 특정 문자를 제거한다.
TRANSLATE(s, from, to) 문자열(s)에 from의 문자를 to 문자로 대체하는데 이 때 단독 변환으로 바뀐다.
REPLACE(s, p, r) 문자열(s)를 p문자를 r문자로 대체한다.

예시

SELECT ename, LPAD(ename, 7, '*'), RPAD(ename, 7, '*')
FROM emp;
/* 결과:
   ename: SMITH, LPAD: **SMITH, RPAD: SMITH**
*/
SELECT ename, LTRIM(ename, 'S'), RTRIM(ename, 'T')
FROM emp;
/* 결과:
   ename: SCOTT, LTRIM: COTT, RTRIM: SCO <- T가 안나올 때까지 제거.
*/
SELECT ename, TRIM ('T' FROM ename)
FROM emp;
-- 양쪾에서 삭제

SELECT ename, REPLACE(ename, 'CO', '*?')
FROM emp;
/* 결과:
   ename: SCOTT, REPLACE: S*?TT
   ename: JONES, REPLACE: JONES <- TRANSLATE와 비교
*/
SELECT ename, TRANSLATE(ename, 'CO', '*?')
FROM emp;
/* 결과:
   ename: SCOTT, TRANSLATE: S*?TT
   ename: JONES, TRANSLATE: J?NES
   ename: CLARK, TRANSLATE: *LARK
   한 자씩 다로 바뀐다.
*/

숫자 함수 사용하기

숫자 함수

함수 내용
ROUND 지정된 자리로 반올림 수행한다. 아무것도 안하면 정수자리(DEFAULT 0)까지 반올림.
TRUNC 지정된 자리에 버림 수행한다. DEFAULT 0 : 정수자리까지 버린다.
MOD(M, N) M을 N으로 나눈 나머지
ABS 숫자 값을 절대값으로 바꾼다.
FLOOR 해당 수보다 작거나 같은 정수 중 가장 큰 정수 값을 반환한다.
CEIL 해당 수보다 크거나 같은 정수 중 가장 작은 정수 값을 반환한다.
SIGN 숫자가 양수면 1, 음수면 -1, 0이면 0을 반환한다.
POWER(M, N) M의 N승

예시

SELECT ROUND(123.456) 결과1, ROUND(123.456, 2) 결과2, ROUND(123.456, -2) 결과3
FROM dual;
/*
	결과1: 123 (정수자리에서 반올림)
	결과2: 123.46 (소수점 세 번째 자리에서 반올림)
	결과3: 100 (십의 자리에서 반올림)
*/
SELECT TRUNC(123.456) 결과1, TRUNC(123.456, 2) 결과2, TRUNC(123.456, -2) 결과3
FROM dual;
/*
	결과1: 123 (정수자리에서 버림)
	결과2: 123.45 (소수점 두 번째 자리에서 버림)
	결과3: 100 (십의 자리에서 버림)
*/

Comments