SYSDATE는 현재 날짜를 나타낸다.
다음날 설정하기.
그럼 이제 간단한 응용을 해보자
SYSDATE에서 +100일을 한 후 요일을 나타내자.
TO_CHAR 함수를 사용하면 된다.
TO_CHAR(숫자 -> 문자로 변환할 때)
TO_CHAR안에 정보를 입력한 후 'day' 로 인해 숫자에서 화요일로 바뀌어 출력된다
다음날 출력하기. TO_CHAR을 사용하지 않으면 위에 사진처럼 숫자로만 나오게 된다.
DECODE() 함수
DECODE 함수는 오라클에서만 사용되는 함수로 IF문을 사용해야 하는 조건문을 처리할 수 있다
로아클에서만 사용되는 함수라서 중요하지 않은건 아니다.
오라클내에서 자주 사용하기 때문에 제대로 익혀서 유용하게 사용하면 된다.
예를 들어보면,
DECODE(A,B,'0','1') :
A와 B가 같다면 '0' 다르다면 '1' 을 출력한다.
DECODE(A,B,'0',C,'1','2')
A와 B가 같다면 0, A와 C가 같다면 1 다르다면 2를 출력한다
DECODE(A,B,'1',NULL)
-> A랑 B랑 같으면 1로 처리하고
-> A랑 B랑 다르면 NULL로 처리한다
DECODE(A,B,1,C,2,D,3,E,4)
- A하고 B와 같으면 1
- A하고 C와 같으면 2
- A하고 D와 같으면 3
- A하고 E와 같으면 4
if~ elseif 문이라고 생각하면 된다
문제) EMP 테이블에서 EMPNO, ENAME을 출력하라
단 HIREDATE 를 1~3월 까지로 설정.
문제) Student 테이블에서 1월에 생일인 사람들을 출력하라.
문제) Professor 테이블에서 부서번호 201번 사람들의 이름과 월급,보너스를 출력하고 연봉을 계산하라
TO_CHAR((pay*12)+bonus,'999,999') 즉 TOTAL을 1000단위로 끊어서 나타내준다.
연봉이나 돈을 나타낼때, 인구수를 나타낼때 주로 사용한다
6970 -> 6,970
문제) 100일 후의 날짜와 시간을 출력하라
YYYY 를 입력하면 2018 을 나타내고 YY만 입력하면 18을 나타낸다.
DECODE 함수에 SUBSTR, INSTR 응용하기
문제)
Student 테이블에서 1 전공이 101번인 학생의 이름과 연락처와 지역을 출력하라
지역번호가 02일때 SEOUL , 051일때 BUSAN을 , 055일때 GYEONGGI를 LOC 컬럼에 출력하라.
deptno1 = 101이다 .
위에 문제를 해석해보면 DECODE 안에 SUBSTR 안에 INSTR이 있다.
Student의 테이블 안에 NAME,TEL컬럼과
DECODE를 사용하여 해당조건을 출력하도록 만드는 LOC 컬럼을 만든다.
SUBSTR함수로 인해 TEL컬럼의 첫번째 부터 INSTR함수 까지,
INSTR 함수로 인해 TEL 컬럼의 ')' 기호에서 -1 한 값까지,
그 숫자(지역번호)가 02 라면 "SEOUL"을 출력, 055라면 "GYEONGGI"를, 051 이라면 "BUSAN"을 출력하고
그 컬럼이름을 "LOC"로 지정.
WHERE 절로 인해 조건을 DEPTNO1 = 101로 지정하여 출력한다.
DECODE 문 안에 DECODE문을 사용하기
DECODE( A, B, DECODE( C, D, 1,NULL))이라고 할 때
A가 B일 경우 중에 C가 D를 만족하면 1을 출력하고 C가 D가 아닐 경우
NYLL을 출력한다.
문제)
Professor 의 테이블에서 부서번호,이름을 출력하고 부서번호가 101번 안에서
이름이 'Audie Murphy' 인 사람일 경우 'BEST'를 출력하고 아닐 경우 'GOOD'을 출력한다.
그 출력하는 컬럼의 이름을 'ETC'로 지정하라
DECODE문 안에 DECODE문을 사용하여 조건을 하나 더 걸었다.
문제)
Professor 테이블에서 부서번호, 이름을 출력하고 부서번호가 101번중에서
이름이 "Audie Murphy" 인 사람은 "GENTLMAN"을 아닌사람은"respect" 를 출력하라
부서번호가 101번이 아닌 사람은 공백을 출력하라
문제) Student 테이블에서 이름,주민번호를 출력하되 부서번호는 101번이다
주민번호의 7번째 자리 숫자가 1일 경우 'MAN'을 2 일 경우 'WOMAN' 을 출력하고 컬럼이름을 'GENDER'로 지정한다
문제)
Student 테이블에서 deptno1 이 201번인 학생의 이름과 전화번호,지역명을 출력하세요
단 지역번호가 02이면 "SEOUL", 031이면 "GYEONGGI" , 051이면 "BUSAN"이며 나머지는 ETC로 지정.
컬럼명은 "LOC" 로 지정하라.
CASE문
DECODE 함수는 주로 = 인 값을 처리하는데 사용한다
크거나 작은 조건을 처리할 경우 DECODE함수는 불편하지만 CASE는 그런 부분을 쉽게 처리할 수 있다.
CASE 표현식 내부에서는 콜마를 사용하지 않는다
CASE 조건 WHEN 결과1 THEN 출력1[WHEN 결과2 THEN출력2] ELSE 출력3 END "컬럼명"
case 컬럼 when 값 then 결과 //when 앞에 컬럼을 쓴 경우 값과 = 비교하는것
//값이 큰지 안큰지 비교할땐 when 뒤에 사용
NVL함수
NULL 값을 만나면 다른 값으로 치환해서 출력하는 함수
NULL(sal , 0) -> sal 컬럼 값이 null일 경우 null 대신 0으로 치환.
NULL(sal,100) -> sal 컬럼값이 null일 경우 null 대신 100으로 치환
NVL2()함수
NVL 함수의 확장으로 NULL값이 아닐 경우 출력할 값을 지정할 수 있다.
'Data Base' 카테고리의 다른 글
Oracle) 단일행 Sub Query (0) | 2018.05.04 |
---|---|
Oracle) MAX/MIN 함수, RANK 함수 (0) | 2018.05.04 |
Oracle) INSTR,SUBSTR,REPLACE 함수 (0) | 2018.04.08 |
Oracle) 다양한 연산자 활용 (0) | 2018.04.05 |
Oracle) 기본 명령어 (0) | 2018.04.05 |