개발(Web)/DB

[Oracle] 단일 행 함수 (1)

shinyelee 2020. 6. 30. 12:00

단일 행 함수 중 문자함수, 숫자함수, 날짜함수에 대해 알아보자.

Ⅰ. 문자함수

1. 대소문자 변환 함수

분명 직원 중 higgins가 있는데 검색이 안 된다. 이는 오류가 아니라 대소문자 구분 때문이다.
lower()를 써 last_name의 데이터를 전부 소문자로 바꿔주고 검색하면 Higgins가 나온다.
예시 2. upper()는 데이터를 대문자로 변환한다. 맨 앞 알파벳만 대문자, 나머지는 소문자로 하고 싶다면 initcap()을 쓴다.
응용. last_name은 대문자로, job_id는 소문자로 출력.

입력 출력 설명
lower('SQL Course') sql course 전부 소문자로.
upper('SQL Course') SQL COURSE 전부 대문자로.
initcap('SQL Course') Sql Course 머릿글자 대문자, 나머지 소문자.

2. 문자 조작 함수

입력 출력 설명
concat('Hello', 'World') HelloWorld 두 파라미터 값 연결. Hello + World.
substr('HelloWorld', 1, 5) Hello 문자열 추출. 1~5번째 글자 표현.
instr('HelloWorld', 'W') 6 문자 위치 숫자로 표시. W는 6번째.
length('HelloWorld') 10 문자열 길이를 숫자 값으로 표시. 10자.
lpad(salary, 10, '$') $$$$$24000 총 10자 되도록 왼쪽부터 $ 채움.
rpad(salary, 10, '*') 24000***** 총 10자 되도록 오른쪽부터 * 채움.
trim('H' from 'HelloWorld') elloWorld 지정 문자가 접두어or접미어일 때 제거.
reaplace('jack and jue', 'j', 'bl') black and blue 특정 문자 대체. j 있는 자리 bl로 바꿈.

concat 써서 first_name과 last_name 붙여서 출력(효율 을).
효율 갑.


Ⅱ. 숫자함수

1. round

* dual : 연산 위해 가라로 만든 테이블. 실제로는 존재하지 않으며 구문의 구색을 맞추는 용도.

입력 출력 설명
select round(45.923, 1)
from dual;
45.9 소수점 아래 첫째 자리까지 나타냄
(소수점 아래 둘째 자리에서 반올림).
select round(45.923, 0)
from dual;
46 일의자리까지 나타냄
(소수점 아래 첫째 자리에서 반올림).
select round(45.923, -1)
from dual;
50 십의자리까지 나타냄
(소수점 위 첫째자리(일의자리)에서 반올림).

 

+n은 소수점 아래 n자리까지 나타냄, 0은 소수점0자리(1의자리)까지 나타냄, -n은 소수점 위 n자리까지 나타냄.

2. trunc

입력 출력 설명
select trunc(34.567, 1)
from dual;
34.5 소수점 아래 첫째 자리까지 나타냄
(소수점 아래 둘째 자리 버림).
select trunc(34.567, 0)
from dual;
34 일의자리까지 나타냄
(소수점 아래 첫째 자리 버림).
select trunc(34.567, -1)
from dual;
30 십의자리까지 나타냄
(소수점 위 첫째자리(일의자리) 버림).

이해를 돕기 위한 추가 예시 + 발그림.

3. mod

입력 출력 설명
select mod(1600, 300)
from dual;
100 왼쪽 수/오른쪽 수 후 나머지 출력.
(1600을 300으로 나눈 나머지 == 100)

응용 예시.


Ⅲ. 날짜함수

1. sysdate 함수

현재 데이터베이스 서버 날짜와 시간을 반환.

2. 날짜를 사용한 산술 연산

입력 출력 설명
날짜 + 숫자 날짜 날짜에 일 수(숫자)를 더한다.
날짜 - 숫자 날짜 날짜에서 일 수(숫자)를 뺀다.
날짜 - 날짜 일 수 한 날짜를 다른 날짜에서 뺀다.
날짜 + 숫자/24 날짜 날짜에 시간(숫자/24) 수를 더한다.

예시.

3. 날짜 조작 함수

입력 결과
months_between('날짜', '날짜') 두 날짜 사이 월 수 출력.
add_months('날짜', 숫자) 날짜에 월 추가.
next_day('날짜', '요일 등') 지정된 날짜 다음날.
last_day('날짜') 해당 월의 마지막 날.
round('날짜', '연도/월 등') 날짜 반올림.
trunc('날짜', '연도/월 등') 날짜 버림(절삭).

응용 예시.


Ⅳ. 연습문제

1. employees 테이블로부터 사원들의 employee_id, last_name, salary,15.5% 인상된 급여(New Salary), 새 급여에서 이전 급여를 뺀 값(Increase)을 출력하는 구문을 작성하시오. (단, 4번째, 5번째 컬럼은 일의 자리에서 반올림하여 정수로 표현하시오.)

round 씀.

2. employees 테이블로부터 사원들의 last_name과 salary를 출력하되 급여를 15자리로 표시하고 왼쪽부터 $ 기호가 채워지도록 지정하시오.

lpad로 15자리 될 때까지 $를 좌측부터 채움.

3. employees 테이블로부터 사원들의 last_name과 last_name의 길이를 출력하되 last_name이 'J', 'A', 'M'으로 시작되는 사원만 출력하시오. 또한 last_name을 기준으로 오름차순 정렬해서 출력하시오.

initcap(머리글자 대문자), like(조건), or(합집합) 등 씀.

4. employees 테이블로부터 사원들의 last_name과 입사한 개월 수를 출력하는 구문을 작성하시오. 단, 입사한 개월 수를 일의 자리까지 반올림해서 출력하시오.

round, months_between 씀.

출처 : 아이티윌 부산교육센터 Oracle Database 12c : 실습가이드북

반응형