숫자관련 함수
round함수 : 반올림 함수
Round함수는 특정 소수점을 반올림하고 나머지는 버리는 함수이다.
표기는 다음과 같다. round(컬럼||숫자, 표시되는 소수점이하 자리수)
select round(12.5123) r1,round(12.5123,0) r2, round(12.5123,1)r3,
round(12.5123,2) r4, round(12.5123,-1) r5 from dual;
--R1 : 13 , R2 : 13, R3 : 12.5 , R4 : 12.51, R5 : 10
trunc함수 : 버림함수
trunc함수는 특정 소수점까지 절사하는 함수이다.
표기는 다음과 같다. trunc(컬럼||숫자, 표시되는 소숫점이하 자리수)
select trunc(12.5123) r1,trunc(12.5123,0) r2, trunc(12.5123,1)r3,
trunc(12.5123,2) r4, trunc(12.5123,-1) r5 from dual;
--R1 : 12, R2 : 12, R3 : 12.5, R4 : 12.51, R5 : 10
mod 함수 : 나머지함수
mod함수는 나머지를 구할때 사용하는 함수이다.
표기는 다음과 같다. mod( 값||나누는 값)
select mod(12, 10) from dual
--2
ceil(큰근사정수), floor(작은근사정수) : 근사정수
ceil과 floor은 인자값에 가까운 정수를 도출하는 함수이다.
차이점이라면 ceil은 가까운 두 정수 중 큰 정수를, floor은 작은 정수를 도출한다.
select ceil(12.345), floor(12.345), ceil(-12.345), floor(-12.345) from dual;
--ceil(12.345) : 13, floor(12.345) : 12, ceil(-12.345) : -12, floor(-12.345) : -13
power, abs, sign함수
power은 제곱함수로 표기는 power(값, 제곱),
abs는 절대값 함수,
sign는 부호함수이다. 양수일 경우 1, 음수일 경우 -1, 0은 0이다.
--power : 제곱함수
select power(2,3) from dual; --8
--abs : 절대값 함수
select abs(-5) a1, abs(5) a2 from dual;--5,5
--sign : 부호. 1:양수, -1:음수, 0:0
select sign(10),sign(-10), sign(0) from dual; --1,-1,0
날짜 관련 함수
sysdate : 현재 날짜 리턴
months_between : 두 날짜 사이의 개월 수 리턴
add_months : 개월 수를 더한 후의 날짜 리턴
last_day : 해당 날짜의 월의 마지막 일자 리턴
--sysdate : 현재 날짜를 리턴. 예약어
select sysdate from dual;
--months_between : 두날짜사이의 개월수 리턴. 소숫점 표현됨
--months_between(날짜1, 날짜2) : 날짜1 - 날짜2 차이의 개월 수
select months_between(sysdate, '22/01/01') from dual;
--7.498...
--add_months : 개월수를 더한 후의 날짜 리턴
select sysdate, add_months(sysdate,3) as "3개월후",
add_months(sysdate,-3) as "3개월전" from dual;
--last_day : 해당 월의 마지막 일짜 리턴
select sysdate, last_day(sysdate) from dual;
문제
--문제
--1.사원테이블에서 사원의 이름, 직업, 입사일,근무일수 출력하기
--근무일수는 버림하여 정수로 출력
--2.사원테이블에서 입사후 3개월을 수습기간이라고 가정할때 수습 종료일 출력하기
--사원이름, 직업, 입사일, 수습종료일 출력하기
--3.사원테이블의 이름, 입사일, 휴가보상일 출력하기
--휴가보상일 : 입사월의 마지막 일자
select ename,job,hiredate, trunc(sysdate-hiredate) as "근무일수" from emp;
select ename,job,hiredate, add_months(hiredate,3) as "수습 종료일" from emp;
select ename, hiredate,last_day(hiredate) as "휴가보상일" from emp;
형변환 함수
to_char(숫자, '형식문자')
날짜, 숫자, 문자 값을 지정한 형식의 varchar2 타입 문자열로 변환하는 함수이다.
지정 형식 | 설명 | 예 | 결과 |
CC | 세기 | TO_CHAR(SYSDATE, 'CC') | 21 |
YYYY or YYY or YY or Y | 연도 | TO_CHAR(SYSDATE, 'YYYY') | 2021 |
Y,YYY | 콤마가 있는 연도 | TO_CHAR(SYSDATE, 'Y,YYY') | 2,201 |
YEAR | 문자로 표혐된 연도 | TO_CHAR(SYSDATE, 'YEAR') | TWENTY TWENTYONE |
BC or AD | BC/AD 지시자 | TO_CHAR(SYSDATE, 'BC') | 서기 |
Q | 분기 | TO_CHAR(SYSDATE, 'Q') | 1 |
MM | 두 자리 값의 월 | TO_CHAR(SYSDATE, 'MM') | 04 |
MONTH | 아홉 자리를 위해 공백을 추가한 월 이름 | TO_CHAR(SYSDATE, 'MONTH') | 4월 |
MON | 세 자리의 약어로 된 월 이름(영문 설정일 경우) | TO_CHAR(SYSDATE, 'MON') | 4월 |
RM | 로마 숫자 월 | TO_CHAR(SYSDATE, 'RM') | IV |
WW or W | 연, 월의 주 | TO_CHAR(SYSDATE, 'WW') | 16 |
DDD or DD or D | 연, 월, 주의 일 | TO_CHAR(SYSDATE, 'DD') | 18 |
DAY | 아홉 자리를 위해 공백을 추가한 요일 이름 | TO_CHAR(SYSDATE, 'DAY') | 일요일 |
DY | 세 자리 약어로 된 요일 이름 (영문 설정일 경우) | TO_CHAR(SYSDATE, 'DY') | 일 |
J | Julian day, BC 4713년 12월 31일 이후의 요일 수 | TO_CHAR(SYSDATE, 'J') | 2459323 |
SELECT TO_CHAR(SYSDATE,'YY'),
TO_CHAR(SYSDATE,'YYYY'),
TO_CHAR(SYSDATE,'MM'),
TO_CHAR(SYSDATE,'MON'),
TO_CHAR(SYSDATE,'YYYYMMDD') 응용적용1,
TO_CHAR(TO_DATE('20210420'),'YYYYMMDD') 응용적용2
FROM DUAL;
to_number : 문자를 숫자로 변환하는 함수
to_date : 문자를 날짜로 변화하는 함수
일반함수
nvl
해당 칼럼의 값이 Null 값인 경우 특정값으로 출력하고 싶을때 사용하는 함수
표기법은 nvl('값','지정값')이다.
select ename, comm, nvl(comm,0) as "nvl" from emp;
--comm이 null 값일 경우 0을 출력
조건함수
decode함수
decode함수는 오라클 쿼리에서 사용하는 함수로 표준 sql함수는 아니다.
대신 case when을 많이 사용한다. 기능은 if else와 비슷한 기능을 수행한다.
표기법은 다음과 같다. decode(컬럼, 조건1, 조건2, ...)
기본식과 도해
(1) A=B이면 X, A≠B이면 Y를 출력
![](https://blog.kakaocdn.net/dn/k2LKe/btrJRErzsom/aHf5tukcWVyGa238SfM68k/img.jpg)
(2) A=B이면 X, A=C이면 Y, A≠B, A≠C이면 Z 출력하는 경우
![](https://blog.kakaocdn.net/dn/kNXzw/btrJRs50mk8/8sBthkCGWJ9v5i7nRzAb80/img.jpg)
(3) DECODE 함수의 중복 :
A1=B이면서 A2=C이면 X 출력,
A1=B이면서 A2≠C이면 Y출력,
A1≠B이면 Z 출력하는 경우
![](https://blog.kakaocdn.net/dn/ufqBy/btrJQcWUwvG/1OHdKDHf4FvcbTkWspmkZ1/img.jpg)
--decode함수
select deptno, decode(deptno, 10, '총무부',
20,'인사부',
30,'재무부') as "부서 이름"
from emp;
--case when then함수
select deptno
case when deptno=10 then ' 총무부'
when deptno=20 then ' 인사부'
else '재무부'
end as "부서이름"
from emp;
문제
--문제
--1. 학생이 생일이 1~3월인 경우 1분기, 4~6월 2분기, 7~9월 3분기,
-- 10~12월 4분기 출생분기라 한다.
--학생의 이름, 주민번호, 출생분기를 출력하기
--단 생일은 주민번호 기중으로 한다.
select name,jumin,
case when substr(jumin,3,2) between '01' and '03' then '1분기'
when substr(jumin,3,2) between '04' and '06' then '2분기'
when substr(jumin,3,2) between '07' and '09' then '3분기'
when substr(jumin,3,2) between '10' and '12' then '4분기'
end 출생분기
from student;
--2. 학생의 생일이 1~3월인 경우 1분기, 4~6월 2분기, 7~9월 3분기,
--10~12월 4분기 출생분기라 한다.
--학생의 이름, birthday, 출생분기를 출력하기
--birth
select name,birthday,
case
when to_char(birthday,'mm') between '01' and '03' then '1분기'
when to_char(birthday,'mm') between '04' and '06' then '2분기'
when to_char(birthday,'mm') between '07' and '09' then '3분기'
when to_char(birthday,'mm') between '10' and '12' then '4분기'
end as "출생분기"
from student;
[참조]
'데이터베이스' 카테고리의 다른 글
데이터베이스_K_Digital_chapter05 (0) | 2022.08.18 |
---|---|
데이터베이스_K_Digital_chapter04 (0) | 2022.08.17 |
데이터베이스_chapter01_데이터베이스 시스템 (0) | 2022.08.12 |
데이터베이스_10.정규화 (0) | 2021.11.08 |
데이터베이스_05.데이터베이스 설계 (0) | 2021.10.19 |