[Database/Oracle] 대소문자 구분, 날짜 데이터 형식과 날짜 데이터 연산, 숫자 천 단위 쉼표로 구분하기

minj-j·2022년 7월 24일
0

Oracle

목록 보기
11/13
post-thumbnail

🌞 대소문자 구분 upper & lower

업무(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

두 날짜 사이의 개월수를 반환하는 함수 : months_between(A, B)
select months_between(sysdate, '04/12/01') from dual;

MONTHS_BETWEEN(SYSDATE,'04/12/01')
----------------------------------
                        211.633226

사원명, 입사일, 근무기간(xx년 xx개월)을 추출
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
profile
minj-j`s Development diary!

0개의 댓글