오라클의 함수는 무조건 리턴값이 있음
함수는 단일행 함수와 복수행 함수가 있음
예시)
SELECT EMPNO, CONCAT(DEPTNO,'번 부서') FORM EMP;
출력예시> 7989 10번 부서 등...
참고) DAUL: SELECT는 꼭 테이블이 있어야 하는데, 테이블이 없을때 임시로 써주는 임시테이블
예시)
SELECT LOWER('NOLJIS') FROM DUAL;
출력예시>noljis
예시)
SELECT UPPER('noljis') FROM DUAL;
출력예시>NOLJIS
참고) SQL의 인덱스는 1부터 시작한다.
예시)
SELECT INSTR('NOLJIS',N) FROM DUAL;
출력예시> 1
문자열 추출이지만 SQL은 형변환이 유연해서 숫자도 가능
예시)
SELECT SUBSTR('NOLJIS',1,3)
출력예시> NOL
범위가 없으면 끝까지 조회해서 출력함
SELECT SUBSTR('NOLJIS',4)
출력예시> JIS
마이너스로 값을 주면 오른쪽->왼쪽으로 값을 조회함. BUT 출력은 왼쪽->오른쪽 순으로 한다.
예시)
SELECT SUBSTR('NOLJIS',-5,3) FROM DUAL;
출력예시> OLJ
SELECT * FROM WHERE SUBSTR(HIREDATE,4,2)=12;
--입사한 월이 12월인 사원들의 모든 정보조회
예시
SELECT INSTR('RAINBOWROMANCE','R',1,2) FROM DUAL;
--RAINBOWROMANCE 문자열에서 두번째로 오는 R은 어디에 위치하는가
출력예시> 8
SELECT INSTR('RAINBOWROMANCE','R',2,2) FROM DUAL;
출력예시>0
두번째글자부터 조회를 했기 때문에 AINBOWROMANCE중에서 조회를 함. 두번째 R은 없기 때문에 0을 리턴한다.
예시)
SELECT LENGTH('NOLJIS') FROM DUAL;
출력예시> 6
예시)
SELECT REPLACE('NOLJIS','S','N') FROM DUAL;
출력예시> NOLJIN
예시)
SELECT LPAD('JIS',6,'NOL') FROM DUAL;
무조건 첫번째 문자열부터 없애줌
예시)
SELECT LTRIM('NOLJIS','NOLJ') FROM DUAL;
출력예시> IS
무조건 마지막 문자열부터 없애줌
SELECT RTRIM('NOLJIS','LJIS') FROM DUAL;
출력예시> NO
중첩해서 쓸 수도 있다
예시)
SELECT RTRIM(LTRIM('NOLJIS','NOLJ'),'S') FROM DUAL;
출력예시> I
예시)
SELECT SYSDATE FROM DUAL;
출력예시> 22/11/17
연산도 가능함
예시)
SELECT SYSDATE+30 FROM DUAL;
--현재날짜에서 30일 후
출력예시> 22/12/17
SELECT SYSDATE-30 FROM DUAL;
--현재날짜에서 30일전
출력예시> 22/10/18
예시)
SELECT SYSDATE,ADD_MONTHS(SYSDATE,3) FROM DUAL;
-- 현재날짜와 3개월 후의 날짜 출력
출력예시> 22/11/17 23/02/17
예시) 근무 개월수 구하기
SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) "근무개월수" FROM EMP;
출력예시>
근무개월수
500.9257
...
(소수점이 나오는 이유는 날짜 시간까지 계산해서! 신경쓰지 말자)
예시)
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH:MI:SS') FROM DUAL;
--YYYY/MM/DD HH:MI:SS 형식으로 현재 날짜,시간 표현
출력예시> 2022-11-17 10:13:33
한글을 쓸땐 ""이용
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD ""HH"시"MI"분"SS"초"') FROM DUAL;
출력예시> 2022-11-17 10시16분04초
24시로 표현 : HH24
오전/오후를 표현: AM HH
예시)
SELECT TO_DATE('2022/02/01','YYYY/MM/DD') FROM DUAL;
출력예시> 22/02/01
문자열이 아니기 때문에 연산이 가능해진다
예시)
SELECT TO_DATE('2022/02/01','YYYY/MM/DD')-20 FROM DUAL;
출력예시> 22/01/12
예시)
SELECT ABS(-10) FROM DUAL;
출력예시> 10
예시)
SELECT CEIL(43.24424) FROM DUAL;
출력예시> 44
예시)
SELECT FLOOR(43.26564) FROM DUAL
출력예시> 43
예시)
SELECT ROUND(43.26564,2) FROM DUAL;
-- 두번째 자리까지 반올림한다
출력예시> 43.27
없으면 소수점에서 반올림한다!
예시)
SELECT ROUND(43.26564) FROM DUAL;
출력예시> 43
두번째 인자값이 0이면 1의 자리까지 마이너스면 10의자리부터...!
예시)
SELECT ROUND(43.26564,0) FROM DUAL;
출력예시>43
SELECT ROUND(43.26564,-1) FROM DUAL;
출력예시>40
예시)
SELECT MOD(10,3) FROM DUAL;
출력예시> 1
예시)
SELECT TRUNC(5.66232,2) FROM DUAL;
출력예시> 5.66
예시)
SELECT POWER(2,3) FROM DUAL;
출력예시> 8
왜쓰냐? > NULL이 있는 행도 포함해서 연산하고 싶어서!
예시)
SELECT AVG(NVL(COMM,0)) FROM EMP;
--COMM컬럼의 NULL값들을 0으로 치환한 뒤 COMM의 평균을 구한다.
출력예시> 183.33333