SELECT -10, ABS(-10) "-10 절대값" FROM DUAL;
SELECT 34.5678, FLOOR(34.5678)
FROM DUAL;
SELECT 34.5678, ROUND(34.5678)
FROM DUAL;
SELECT TRUNC(12.3456, 2), TRUNC(12.3456, -1), TRUNC(12.3456) FROM DUAL;
SELECT MOD(27,2)"27%2 값", MOD(27,5)"27%5 값", MOD(27,7)"27%7 값" FROM DUAL;
-- 1. 사번(EMPNO)이 홀수인 사람들을 검색
SELECT * FROM EMP WHERE MOD(EMPNO,2) = 1;
SELECT 'Welcome to Oracle' "입력된 문자열", UPPER('Welcome to Oracle') "문자열UPPER" FROM DUAL;
SELECT 'Welcome to Oracle' "입력된 문자열", LOWER('Welcome to Oracle') "문자열LOWER" FROM DUAL;
-- 2. 다음과 같이 쿼리문을 구성하면 과연 직급이 'manager'인 사원을 검색하시오.
SELECT '그냥찾음',EMPNO, ENAME, JOB FROM EMP WHERE JOB = 'manager';
-- 출력 없음
SELECT EMPNO, ENAME, JOB FROM EMP WHERE UPPER(JOB) = UPPER('Manager');
-- 속성과 데이터 모두 같은 대소문으로 맞춤.
SELECT 'wElCoMe tO oRaCLe' "입력된 문자열" , INITCAP('wElCoMe tO oRaCLe')"문자열INITCAP" FROM DUAL;
SELECT LENGTH('Oracle'), LENGTH('오라클') FROM DUAL;
-- 영문을 2바이트 한글은 1바이트로 인식함.
SELECT SUBSTR('Welcom to Oracle', 4, 3) FROM DUAL; -- com
-- 4번째 문자부터 3개만 출력
SELECT SUBSTR('Welcom to Oracle', -4, 3) FROM DUAL; -- acl
-- 역행 4번째 문자부터 순행 3개 출력
-- 날짜데이터 월 일 단위로 출력하기.
SELECT SUBSTR(HIREDATE, 1,2) 년도,
SUBSTR(HIREDATE, 4,2) 달 FROM EMP;
-- SUBSTRB 문자가 메모리에 저장되는 바이트 수를 계산함.
SELECT SUBSTR('웰컴투오라클',3,4) , SUBSTRB('웰컴투오라클', 3,4) FROM DUAL;
SELECT SUBSTR('Welcome to Oracle',3,4), SUBSTRB('Welcome to Oracle', 3,4) FROM DUAL;
SELECT INSERT('문자열', '문자', '시작위치', '찾은 문자들 중 위치')
: 문자열
N번째 시작위치
에서문자
를 찾기 시작해 찾은 문자들 중 위치
가 n번째의 위치값 출력
--INSTR 함수는 대상 문자열이나 칼럼에서 특정 문자가 나타나는 위치
SELECT INSTR('WELCOME TO ORACLE', 'O') "O의 위치" FROM DUAL;
SELECT INSTR('WELCOME TO ORACLE', 'O', 6, 2) "6번째 이후 2번째 'O'" FROM DUAL;
SELECT INSTR('데이터베이스', '이', 3, 1),
INSTRB('데이터베이스', '이', 3, 1)
FROM DUAL;
-- LPAD : LEFT PADDING - 왼쪽 여백(테두리 사이의 여백)
SELECT LPAD('Oracle',20,'#') FROM DUAL;
SELECT RPAD('Oracle',20,'#') FROM DUAL;
-- 문자열 공백 제거
SELECT TRIM(' Oracle ') trim FROM DUAL;
SELECT LTRIM(' Oracle ') 왼쪽trim FROM DUAL;
SELECT RTRIM(' Oracle ') 오른쪽trim FROM DUAL;
-- SYSDATE : SYSTEM DATE - 컴퓨터에 지정된 현재날짜 출력
SELECT SYSDATE FROM DUAL;
SELECT SYSDATE-1 어제날짜, SYSDATE 오늘날짜 , SYSDATE+1 내일날짜 FROM DUAL;
--6. 각 사원들의 현재까지의 근무 일수를 구하기
SELECT (SYSDATE - HIREDATE) 근무일수 FROM EMP;
--6. 각 사원들의 현재까지의 근무 일수를 구하기
-- 날짜 소수점 반올림
SELECT ROUND(SYSDATE - HIREDATE) 근무일수 FROM EMP;
-- 날짜 단위 기준으로 반올림하기.
-- '월'단위 기준으로 사원 입사일 출력하기.
SELECT HIREDATE "입사일", ROUND(HIREDATE, 'MONTH') "'월'단위 기준 입사일" FROM EMP;
TRUNC(날짜,포멧기준)
-- '월'단위 기준으로 이하 지우기
SELECT HIREDATE "입사일" ,TRUNC(HIREDATE, 'MONTH')"'월'단위 기준 입사일" FROM EMP;
SELECT ENAME 이름,
SYSDATE 오늘,
HIREDATE 입사일,
MONTHS_BETWEEN(SYSDATE, HIREDATE) 근무일수
FROM EMP;
SELECT ENAME 이름,
SYSDATE 오늘,
HIREDATE 입사일,
ROUND(MONTHS_BETWEEN(SYSDATE, HIREDATE)) 근무일수
FROM EMP;
ADD_MONTHS(날짜, '개월수')
SELECT ENAME 이름, SYSDATE 오늘, HIREDATE 입사일,
ADD_MONTHS(HIREDATE, 6) 입사6개월후
FROM EMP;
NEXT_DAY(날짜,'요일')
SELECT SYSDATE 오늘,
NEXT_DAY(SYSDATE,'수요일')"다음 수요일"
FROM DUAL;
LAST_DAY(날짜)
SELECT HIREDATE 입사일,
LAST_DAY(HIREDATE) "입사한 달 마지막날"
FROM EMP;
TO_CHAR (날짜, '출력형식')
-- '년-월-일' 형식으로 출력하기
SELECT SYSDATE "오늘", TO_CHAR(SYSDATE, 'YYYY-MM-DD')"날짜 형식 변형" FROM DUAL;
-- '날짜+요일'형식으로 출력하기
SELECT HIREDATE 오늘, TO_CHAR(HIREDATE, 'YYYY/MM/DD DAY') "입사일, 요일" FROM EMP;
TO_CHAR (날짜, '시간형식')
-- '날짜+시간'형식으로 출력하기
SELECT TO_CHAR(SYSDATE, 'YYY/MM/DD, HH12:MI:SS')"날짜+12시간" FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYY/MM/DD, HH24:MI:SS')"날짜+24시간" FROM DUAL;
TO_CHAR(숫자, '변형형식')
-- 원화(\)로 출력하기.
SELECT ENAME 이름 , SAL 연봉, TO_CHAR(SAL, 'L999,999') FROM EMP;
SELECT ENAME 이름 , SAL 연봉, TO_CHAR(SAL, 'L000,000') FROM EMP;
L999,999
L000,000
L
: 통화(원화)출력을 의미함
999,999
: 자리수와 ,
의 위치를 지정하고, 빈자리는 비워서 출력함.
000,000
: 자리수와 ,
의 위치를 지정하고, 빈자리는 0으로 채워서 출력함.
TO_DATE(‘문자’, ‘날짜형식')
-- 문자를 날짜형식으로 변환해 데이터 찾기.
SELECT ENAME , HIREDATE FROM EMP
WHERE HIREDATE = TO_DATE(19810220, 'YYYYMMDD');
-- 문자형 날짜형으로 변환해 날짜연산하기
SELECT SYSDATE-TO_DATE('2008/01/01', 'YYYY/MM/DD') "08년1월1일 ~ 현재" FROM DUAL;
SELECT TRUNC(SYSDATE-TO_DATE('2008/01/01', 'YYYY/MM/DD')) "TRUNC(08년1월1일 ~ 현재)" FROM DUAL;
SELECT TO_NUMBER('20,000','99,999') - TO_NUMBER('10,000', '99,999')
FROM DUAL;
SELECT ENAME "직원명", SAL "월급", COMM "성과급", SAL*12+COMM "NULL연봉", NVL(COMM , 0) , SAL*12+NVL(COMM, 0)"NVL연봉" FROM EMP ORDER BY JOB;
-- NVL(COMM , 0) : NULL값을 0으로 변환
-- 연산시 NULL 값이 문제가 됨.
--7. 상사(MANAGER)이 없는 사원만 출력하되 MGR 칼럼 값 NULL 대신 CEO로 출력
SELECT EMPNO ,ENAME , NVL(TO_CHAR(MGR, '9999'), 'C E O') MANAGER FROM EMP WHERE MGR IS NULL;
-- TO_CHAR(MGR, '999')
-- MGR는 NUMBER 타입으로 선언됨.
-- CHAR 타입으로 형변환 후, CHAR 타입의 '9999' 비워둠.
SELECT ENAME, DEPTNO, DECODE(DEPTNO, 10, 'ACCONUNTING',
20, 'RESERCH',
30, 'SALES',
40, 'OPERATIONS') AS DNAME
FROM EMP;
/*
8. 직급에 따라 급여를 인상하도록 하자. 직급이 'ANAlYST'인 사원은 5%,
'SALESMAN'인 사원은 10%, 'MANAGER'인 사원은 15%, 'CLERK'인 사원
은 20%인 인상한다.
*/
SELECT EMPNO, JOB, SAL, DECODE(JOB, 'ANALYST', ROUND(SAL*1.05),
'SALESMAN', ROUND(SAL*1.1),
'MANAGER', ROUND(SAL*1.15),
'CLERK', ROUND(SAL*1.2),
'PRESIDENT', SAL) AS UPSAL
FROM EMP;
SELECT ENAME , DEPTNO, CASE WHEN DEPTNO = 10 THEN 'ACCOUNTING'
WHEN DEPTNO = 20 THEN 'RESERCH'
WHEN DEPTNO = 30 THEN 'SALES'
WHEN DEPTNO = 40 THEN 'OPERATION'
END AS DNAME
FROM EMP;