출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

-- 숫자함수
select ABS(-15.5) from dual; -- 절대값
select floor(15.7) from dual; -- 소숫점 절삭
select round(-15.8) from dual; -- 정수타입으로 반올림
select round(-15.693, 2) from dual; -- 몇번째 자리까지 표시할 것인지 선택
select log(10, 100 ) from dual; -- 로그값(지수)구해줌
select power(3, 2) from dual; -- 제곱

 

 


 

 

-- 문자함수

select concat('나는', '손흥민입니다.') from dual; -- 두개붙여줌
select concat('저의 이름은', ename) from emp where job='MANAGER'; -- 응용

select LOWER('ABCD') "Lowercase" from dual;
select lower(ename) from emp;

select lpad('page 1',15,'*') from dual; -- 별표로 가려줌
select rpad('910119-2',14,'*') from dual;

select substr('ABCEDFG',3,4) from dual; -- 3번째부터 4개 자른다
select rpad(substr('910119-2000000',1,8),14,'*') from dual; -- 응용

select Ltrim(' =from=','a') from dual; -- 제거
select Rtrim('    =from=====           ',' ') from dual;
select trim('=' from '=======from=======') from dual;
select trim(' ' from '   =====from====   ') from dual;

select REPLACE('JACK and JUE','J','BL') "Changes" FROM DUAL; -- J를 BL로 변경
select REPLACE('뽀준','준','선') "Changes" FROM DUAL;

 


 

 

-- 날짜함수
select sysdate from dual; -- 오늘날자
select sysdate+21 from dual; --14일 뒤

select add_months(sysdate, 4) from dual; -- 4개월 더해줌
select last_day(sysdate) from dual; -- 이달의 마지막날 알려줌..

 


 

 

-- 날짜 >문자
select sysdate from dual;
select sysdate, to_char(sysdate, 'YYYY-MM-DD') "바뀐날짜" from dual;
select sysdate, to_char(sysdate, 'YYYY-MM-DD Day dy')from dual;
select sysdate, to_char(sysdate, 'YYYY-MM-DD Day dy AM PM HH HH24 mi ss') from dual;
select to_char(sysdate, 'YYYY.MM.DD.  HH24:mi:ss') from dual; -- 네이버st

 


 

 

-- 숫자 > 문자
SELECT TO_CHAR (1230000) FROM DUAL;
select to_char(10000.123, 'L000,000.00') from dual;
select to_char(10000, 'L999,999.99') from dual;

select sal, to_char(sal*1100, 'L00,000,000') from emp;
select sal, to_char(sal*1100, 'L99,999,999') from emp;
select ename,sal, to_char(sal*1100*12+nvl(comm,0)*1100, 'L99,999,999') from emp order by sal desc; 

 


 

 

-- 문자 > 날짜
-- 2020.11.01
select TO_DATE('2019/09/05', 'YYYY/MM/DD') from dual;
select TO_DATE('2020.11.01.', 'YYYY.MM.DD.') from dual;

-- 오늘이 2020년 1월 1일에서 몇일이 지났는지 확인해보자 :)
select trunc(sysdate - to_date('20-01-01','YY-MM-DD')) from dual;

 


 

 

-- 문자 > 숫자
select TO_NUMBER('100.00', '999.99') * to_number('10.00', '99.99') from dual; 

 

 


 

 

--사용법

DECODE(컬럼,조건,TRUE 결과값,FALSE 결과값)


--예제

--TYPE 1이면 정규직 2면 비정규직
SELECT 
DECODE(TYPE,1,'정규직','비정규직') AS TYPE
FROM
EMP_TABLE


--주민등록번호(MY_NUM)이(가) 1또는3으로 시작하면 남자 아니면 여자
SELECT 
DECODE(SUBSTRING(MY_NUM,0,1),1||3,'남','여') AS GENDER
FROM
EMP_TABLE
-- DECODE 함수 : switch 문과 비슷
-- 사원 이름, 부서번호, 부서이름 출력
select ename, deptno,
decode(deptno,
        10, 'ACCOUTING',
        20, 'RESEARCH',
        30, 'SALES',
        40, 'OPERATIONS')
        as dname
from emp;


-- 8. 직급에 따라 급여를 인상하도록 하자. 
-- 직급이 'ANAlYST'인 사원은 5%, 'SALESMAN'인 사원은 10%, 'MANAGER'인 사원은 15%, 
-- 'CLERK'인 사원은 20%인 인상한다.

select ename, job, sal,
decode(job,
    'ANALYST', sal*1.05,
    'SALESMAN', sal*1.1,
    'MANAGER', sal*1.15,
    'CLERK', sal*1.2)   
     as sal2
from emp
;

 

 


 

 

-- CASE 함수
select ename, deptno,
    case
        when deptno=10 then 'ACCOUNTING'
        when deptno=20 then 'RESEARCH'
        when deptno=30 then 'SALES'
        when deptno=40 then 'OPERATIONS'
    end as dname
from emp
order by dname
;

+ Recent posts