--nvl(값, null일 경우 대체할 값)
--nlv2(값, null이 아닌경우 대체할 값,null일 경우 대체)
select first_name, salary, commission_pct, manager_id, department_id
, salary + salary*nvl(commission_pct, 0)
,nvl2(commission_pct, '커미션있음','커미션0')
,coalesce(commission_pct, manager_id, department_id) "null이 아닌 최초 컬럼"
from employees;
select ' oracle ',
'*'||ltrim(' oracle ')||'*',
'*'||trim('A'from'AAAAAAAoracleAAAAAA')||'*' --특정문자도 검색하여 trim 가능
from dual;
select
to_char(sysdate,'yyyy-MM-dd hh:mi:ss') --2023-09-20 11:05:15
from dual;
--입사 기간 계산
select
first_name,
round(sysdate - hire_date,2) as "입사 일수",
floor(months_between(sysdate, hire_date)) as "입사한 개월수",
floor(months_between(sysdate, hire_date)/12) as "입사한 년수",
months_between('2023/05/15','2023/01/15')
from employees;
--month yeare 활용
select
first_name, hire_date,
round(hire_date,'MONTH') as "월반올림", -- month는 16일 부터 반올림
round(hire_date,'year') as "연올림", -- year는 7월 부터 반올림
ceil(to_date('2023/09/29') - sysdate) -- 날짜를 기준으로 일자 반환
from employees;
--nextday (날짜 인자값에서 최초로 나타나는 요일의 날짜 반환)
select sysdate, sysdate+1, next_day(sysdate, '화요일') --23/09/26
from dual;
--lastday(기준이 되는 날짜의 월의 마지말 일자 구하기)
select sysdate,
to_char(sysdate, 'yy-mm-dd am hh:mi:ss') "날짜->문자", --문자라 더하기 안됨
-- 아래는 초단위까지의 시간에 포맷을 주어서 날짜로 인식하여 계산은 되지만, 출력은 일까지만
to_date('2023-09-20 13:10:10','yyyy/mm/dd hh24:mi:ss')+1.4 "문자->날짜로"
from dual;
select manager_id, decode(manager_id, 100, '스티븐',102,'니나',103,'렉스','기타') as "decode연습1"
from employees;
select manager_id
, decode(job_id, 'IT_PROG' , salary*1.1, 'FI_ACCOUNT', salary*1.2, salary*1.05) "decode 연습"
, case when manager_id=100 then '스티븐'
when manager_id = 102 then'니나'
when manager_id = 103 then'렉스'
else '기타' end "case 연습",
salary,
case when salary>15000 then 'A'
when salary between 10000 and 15000 then 'B'
when salary>=5000 and salary<10000 then 'C' else 'D' end "case연습3",
first_name,
case when length(first_name) >=7 then '이름이 길다' else '이름이 짧다' end
from employees;
select department_id as "dfdf", sum(salary) --5
from EMPLOYEEs --1
where salary >= 10000 --2
group by department_id --3
having sum(salary)>= 50000 --4
order by 1; --6