업무(job)가 'salesman', 'clerk' 인 사람을 추출하라
select ename, job from emp where lower(job)='salesman' or lower(job)='clerk';
// 원래 데이터가 대문자로 저장되어 있어 소문자로는 조건절이 작동되지 않는다. 근데 lower로 job으로 소문자로 만들어 주어 조건절이 작동할 수 있게되었다.
select ename, job from emp where lower(job) in('salesman', 'clerk');
// in(A, B,...) : A or B or ...
이렇게도 검색 가능하다.
select sysdate from dual;
# 결과
SYSDATE
--------
22/07/18
select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;
# 결과
TO_CHAR(SYSDATE,'YY
-------------------
2022/07/18 16:34:34
날짜관련 형식 종류
select to_char(sysdate, 'yyyy') from dual;
#'yyyy'안에 아래의 것들을 하나씩 넣어보면서 결과를 확인해 보자
TO_C
----
2022
'yy'
'year'
'month'
'mon'
'mm'
'q' // 3(분기) 분기를 알려준다
'd' // 4(요일, 1-일요일)을 숫자 형태로 알려준다
'day'
'dy'
'dd'
'ddd' // 201(365일 기준 1년이 얼마나 지났는지 알려준다.)
'hh'
'hh24'
'miss'
'am' | 'pm'
날짜 형식에 fm
, sp
, th
붙이기
select to_char(sysdate, 'fmyyyy.mmsp.ddth day am hh:mi:ss') from dual;
#결과
TO_CHAR(SYSDATE,'FMYYYY.MMSP.DDTHDAYAMHH
----------------------------------------
2022.seven.24th 일요일 오후 11:7:46
위와 같이 fm
은 07, 01과 같이 홀수 자리 앞에 0을 붙이지 않고 날짜가 출력되게 해주고
sp
는 sp가 붙은 날짜 형식을 영문으로 바꾸어 준다.
th
는 영문 숫자 세는 방식으로 나타내 준다 1st, 2ed, 3rd.. 같이
select last_day(sysdate), next_day(sysdate, '월'), add_months(sysdate, 3) from dual;
#결과
LAST_DAY NEXT_DAY ADD_MONT
-------- -------- --------
22/07/31 22/07/25 22/10/20
select months_between(sysdate, '04/12/01') from dual;
MONTHS_BETWEEN(SYSDATE,'04/12/01')
----------------------------------
211.633226
select saname, sahire,
floor(months_between(sysdate, sahire)/12) || '년 ' ||
floor(mod(months_between(sysdate, sahire), 12)) || '개월' "근무기간"
from sawon;
#결과
SANAME SAHIRE 근무기간
---------- -------- --------------------
홍길동 80/01/01 42년 6개월
한국남 88/11/01 33년 8개월
이순신 85/03/01 37년 4개월
이순라 90/05/01 32년 2개월
놀기만 96/06/01 26년 1개월
류별나 89/12/01 32년 7개월
채시라 93/10/01 28년 9개월
이성계 84/05/01 38년 2개월
무궁화 96/11/01 25년 8개월
임꺽정 88/04/01 34년 3개월
깨똥이 90/05/01 32년 2개월
날짜 연산 함수 :
to_yminterval('01-00(몇 개월 후)')
to_dsinterval('몇 일 00:00:00(몇 시간, 분, 초) 후')
select saname, sahire, sahire + to_yminterval('01-06') "승급날짜" from sawon; //'년-개월' 여기는 6개월 후 승급날짜
SANAME SAHIRE 승급날짜
---------- -------- --------
홍길동 80/01/01 81/07/01
한국남 88/11/01 90/05/01
이순신 85/03/01 86/09/01
이순라 90/05/01 91/11/01
놀기만 96/06/01 97/12/01
류별나 89/12/01 91/06/01
채시라 93/10/01 95/04/01
이성계 84/05/01 85/11/01
무궁화 96/11/01 98/05/01
임꺽정 88/04/01 89/10/01
깨똥이 90/05/01 91/11/01
select saname, sahire, sahire + to_dsinterval('100 00:00:00') "계약종료" from sawon; //'일 시:분:초'
SANAME SAHIRE 계약종료
---------- -------- --------
홍길동 80/01/01 80/04/10
한국남 88/11/01 89/02/09
이순신 85/03/01 85/06/09
이순라 90/05/01 90/08/09
놀기만 96/06/01 96/09/09
류별나 89/12/01 90/03/11
채시라 93/10/01 94/01/09
이성계 84/05/01 84/08/09
무궁화 96/11/01 97/02/09
임꺽정 88/04/01 88/07/10
깨똥이 90/05/01 90/08/09
날짜에 사용되는 round, trunc 함수
select saname, sahire, round(sahire, 'year') from sawon; // 기준형식의 하위에서 반올림
SANAME SAHIRE ROUND(SA
---------- -------- --------
홍길동 80/01/01 80/01/01
한국남 88/11/01 89/01/01
이순신 85/03/01 85/01/01
이순라 90/05/01 90/01/01
놀기만 96/06/01 96/01/01
류별나 89/12/01 90/01/01
채시라 93/10/01 94/01/01
이성계 84/05/01 84/01/01
무궁화 96/11/01 97/01/01
임꺽정 88/04/01 88/01/01
깨똥이 90/05/01 90/01/01
select saname, sahire, trunc(sahire, 'month') from sawon;
SANAME SAHIRE TRUNC(SA
---------- -------- --------
홍길동 80/01/01 80/01/01
한국남 88/11/01 88/11/01
이순신 85/03/01 85/03/01
이순라 90/05/01 90/05/01
놀기만 96/06/01 96/06/01
류별나 89/12/01 89/12/01
채시라 93/10/01 93/10/01
이성계 84/05/01 84/05/01
무궁화 96/11/01 96/11/01
임꺽정 88/04/01 88/04/01
깨똥이 90/05/01 90/05/01
select trunc(sysdate, 'month') from dual;
TRUNC(SY
--------
22/07/01
(9-값이 없으면 표시 안 함, 0-값이 없어도 표시)
9 = 엑셀의 #와 같은 의미
select saname, to_char(sapay, 'fm$9,990') sapay from sawon;
#결과
SANAME SAPAY
---------- -------
홍길동 $5,000
한국남 $3,000
이순신 $3,500
이순라 $1,200
놀기만 $2,300
류별나 $1,600
채시라 $3,400
이성계 $2,803
무궁화 $3,000
임꺽정 $2,200
깨똥이 $4,500