. 숫자함수 예제
Q. 45.5645의 소수 세번째 자리에서 반올림 하여라
SELECT ROUND(45.5645,3) FROM DUAL;
Q. 45.564의 1의 자리에서 반올림 하여라
SELECT ROUND(45.564,0) FROM DUAL;
Q. ROUND 함수
SELECT 34.678, ROUND(68.678, -2) FROM DUAL; // 10의 자리에서 반올림 = 100
SELECT 34.678, ROUND(68.678, -1) FROM DUAL; // 1의 자리에서 반올림 = 70
Q. 절대값
SELECT -10, ABS(-10) FROM DUAL;
Q. FLOOR 함수
SELECT 34.678, FLOOR(34.678) FROM DUAL;
Q. TRUNC
SELECT 35.567, TRUNC(35.567) FROM DUAL;
SELECT 35.567, TRUNC(35.567,1) FROM DUAL; // 소숫점이하 한자리까지 남기겠다는 뜻
SELECT 35.567, TRUNC(35.567,2,3) FROM DUAL; // 오류 // ORA-00939 : 함수의 인수가 너무 많습니다.
Q. 1200을 14로 나눈 나머지를 구하라
SELECT MOD(1200,14) FROM DUAL;
Q. 사원번호가 홀수인 사원들을 출력하시오
SELECT * FROM emp WHERE MOD(empno, 2) = 1;
Q. SIGN 함수 사용 // 양수인지 음수인지 판별하는 함수
SELECT SIGN(100) AS sign_value11
, SIGN(-100) AS sign_value22
, SIGN(0) AS sign_value33
, SIGN(NULL) AS sign_value44
FROM DUAL;
Q. CEIL 함수
SELECT CEIL(35.345), CEIL(-45.2344), CEIL(-35.678) FROM DUAL;
// 마이너스의 경우, 정수가 넘지 않는 정도에서 반올림(반올림 안된다고 보면 됨)
문자함수
Q. LOWER 문제
SELECT 'Welcome to Oracle' "적용전", LOWER('Welcome to Oracle') "Lower 적용후" FROM DUAL;
Q. UPPER 문제
SELECT 'Welcome to Oracle' "적용전", UPPER('Welcome to Oracle') "UPPER 적용후" FROM DUAL;
Q. emp 테이블에서 'smith'이름을 갖는 사원을 출력하시오. //UPPER, LOWER 문제
단, 'smith' 그대로 사용하시오.
SELECT * FROM emp WHERE ename = UPPER('smith');
SELECT * FROM emp WHERE LOWER(ename) = 'smith';
Q. INITCAP 문제
SELECT 'Welcome to Oracle' "적용전", INITCAP('Welcome to Oracle') "INITCAP 적용후" FROM DUAL;
Q. LENGTHB 문제
SELECT LENGTHB('ORACLE'), LENGTHB('오라클') FROM DUAL;
Q. INSTR 문제 // 대소문자를 구별한다.
SELECT INSTR('Welcome to Oracle' , 'O') FROM DUAL;
Q. emp 테이블에서 ename, job 의 첫번째 글자를 대문자로 표현하세요.
SELECT INITCAP(ename), INITCAP(job) FROM emp;
```.
SUBSTR : 대상 문자열이나 컬럼의 자료에서 시작 위치부터 선택 개수만큼의 문자를 추출한다.
ex) 인덱스 4부터 시작해서 문자 3개를 추출하는 쿼리문(오라클에서 인덱스는 0이 아닌 1부터 시작한다.)
ex) SELECT SUBSTR('Welcome To Oracle', 4, 3) FROM DUAL;
Q. ora가 나오게 하시오
SELECT SUBSTR('Welcome To Oracle', 12, 3) FROM DUAL;
Q. 입사날짜 년/월/일 분리하기
SELECT ename, 19 || SUBSTR(hiredate, 1, 2) 년도, SUBSTR(hiredate, 4, 2) 달, SUBSTR(hiredate, 7,2) 일 FROM emp;
SELECT ename, CONCAT('19', SUBSTR(hiredate, 1, 2))년도, SUBSTR(hiredate, 4, 2)달, SUBSTR(hiredate, 7,2)일 FROM emp;
로도 표현 가능하다.
Q. emp테이블의 사원중에서 05월에 입사한 사원들의
이름, 월급, 입사일을 출력하는 쿼리문을 작성하시오
SELECT ename, sal, hiredate FROM emp WHERE SUBSTR(hiredate, 4, 2) = '05';
Q. emp 테이블의 사원중에서 이름의 마지막 글자가 'S'로 끝나는 사원의
이름, 월급, 직급을 출력하는 쿼리문을 작성하시오. (2가지 방법을 사용하시오)
SELECT ename, sal, job FROM emp WHERE ename LIKE('%S');
SELECT ename, sal, job FROM emp WHERE SUBSTR(ename, length(ename),1) = 'S';
SELECT ename, sal, job FROM emp WHERE SUBSTR(ename, -1, 1) = 'ES';
Q. emp 테이블의 사원중에서 이름의 마지막 글자가 'ES'로 끝나는 사원의
이름, 월급, 직급을 출력하는 쿼리문을 작성하시오. (2가지 방법을 사용하시오)
SELECT ename, sal, job FROM emp WHERE SUBSTR(ename, -2, 2) = 'ES';
SELECT ename, sal, job FROM emp WHERE ename LIKE('%ES');
SELECT ename, sal, job FROM emp WHERE SUBSTR(ename, length(ename)-1, 2) = 'ES';
Q. emp 테이블의 사원 중에서 이름의 4번째 글자가 'E'인 사원의
이름, 부서번호, 월급을 출력하는 쿼리문을 작성하시오 (3가지 방법)
SELECT ename, empno, sal FROM emp WHERE ename LIKE'___E%';
SELECT ename, empno, sal FROM emp WHERE SUBSTR(ename, 4, 1) = 'E';
SELECT ename, empno, sal FROM emp WHERE INSTR(ename, 'E', 4, 1) = 4;
Q. emp 테이블의 ename 컬럼에서 이름의
마지막 글자가 'D'인 사원의
이름, 월급, 입사일을 출력하는 쿼리문을 작성하시오 (3가지 방법 LIKE/INSTR/SUBSTR)
SELECT ename, sal, hiredate FROM emp WHERE ename LIKE('%D');
SELECT ename, sal, hiredate FROM emp WHERE SUBSTR(ename, -1, 1) = 'D';
SELECT ename, sal, hiredate FROM emp WHERE SUBSTR(ename, LENGTH(ename), 1) = 'D';
SELECT ename, sal, hiredate FROM emp WHERE INSTR(ename, 'D',LENGTH(ename),1) = LENGTH(ename);
SELECT ename, sal, hiredate FROM emp WHERE INSTR(ename, 'D',-1,1) = LENGTH(ename);
. SUBSTRB : 명시된 개수만큼의 문자가 아닌 바이트 수를 잘라낸다.
SELECT SUBSTR('Welcome to Oracle' 3, 4), SUBSTRB('Welcome To Oracle, 3, 4) FROM DUAL;
SELECT SUBSTR('웰컴투오라클', 3,4), SUBSTRB('웰컴투오라클, 3, 4) FROM DUAL;
// 한글은 한 글자당 2byte로 본다. // 한글자당 2byte 인데 예를들어 5byte까지 출력했을 때 마지막글자는? 안나온다.