--문자함수
SELECT LOWER('AbCDef'), UPPER('AbCDef'), INITCAP('abCDeF')
FROM dual;
--toLowerCase()
--toUpperCase()
SELECT LENGTH('AbCDef'), LENGTH('가') -- LENGTH 문자 갯수
,LENGTHB('AbCDef'), LENGTHB('가') -- LENGTHB는 바이트수
FROM dual;
SELECT INSTR('hellojava', 'a') --7
,INSTR('hellojava', 'a', 8) --9(8번째 위치부터 검색 시작)
,INSTR('hellojava', 'a', 1, 2) -- 9(8번째 위치부터 검색 시작, 2번째 위치를 찾아라)
,INSTR('hellojava', 'a', -1, 2) -- 7 (거꾸로 검색 시작, 2번째 위치를 찾아라)
,INSTR('hellojava', 'b') --0. 찾지 못한다는 의미.
FROM dual;
SELECT LPAD('abc', 5, '*') --**abc (왼쪽부터 빈 자리에 *를 넣어서 5개로 만들어라)
,RPAD('abc', 5, '*') --abc**
FROM dual;
SELECT TRIM(LEADING 'a' FROM 'aABCDEFa') -- 앞에있는 a 문자를 잘라내라
,TRIM(TRAILING 'a' FROM 'aABCDEFa') -- 뒤에있는 a 문자를 잘라내라
,TRIM(BOTH 'a' FROM 'aABCDEFa') -- 앞뒤에있는 a 문자를 잘라내라
FROM dual;
SELECT REPLACE('JACK and JUE','J','BL') --BLACK and BLUE //J를 다 BL로 다꿈.
,TRANSLATE('JACK and JUE','J','BL') --BACK and BUE //첫 번째 J만 B로 바꿈.
FROM dual;
----------------------------------------
-- 숫자 함수
SELECT MOD(10, 2), MOD(10, 0) -- 오라클은 0으로 나눌 수 있다.
FROM dual;
SELECT ROUND(45.923, 2) --45.92 두번째 자리까지 반올림.
,ROUND(45.923, 0) --46
,ROUND(45.923) --46
,ROUND(45.923, -1) --50 10의 자리까지 반올림.
,TRUNC(45.923, 2) --45.92
,TRUNC(45.923, 0) --46
,TRUNC(45.923) --46
,TRUNC(45.923, -1) --50 10의 자리까지 반올림.
FROM DUAL;
SELECT *
FROM jobs;
-- 직무명에 manager를 포함한 모든 직무를 출력하시오
-- 직무명은 대소문자 구분안함
SELECT *
FROM jobs
WHERE LOWER(job_title) LIKE '%manager%';
--사원이름에 'an'이 포함된 사원의 사번과 이름을 출력하시오.
1.LIKE 연산자로 해결
SELECT employee_id, first_name
FROM employees
WHERE LOWER(first_name) LIKE '%an%';
--2. INSTR() 함수로 해결
SELECT employee_id, first_name
FROM employees
WHERE INSTR(LOWER(first_name), 'an') > 0;
--3. SUBSTR() 함수로 해결하려면 반복문이 필요한데, 반복문을 쓸 수 없음. 혼자서 해결 불가.
SELECT employee_id, first_name
FROM employees
WHERE SUBSTR(first_name, INSTR(first_name,'an'), 2) = 'an';
SELECT ADD_MONTHS(SYSDATE, 1), ADD_MONTHS(SYSDATE, -10)
FROM DUAL;
SELECT MONTHS_BETWEEN(SYSDATE, '19/09/01')
FROM DUAL;
SELECT MONTHS_BETWEEN(SYSDATE, '19.09.01')
FROM DUAL;
SELECT MONTHS_BETWEEN(SYSDATE, '20190901')
FROM DUAL;
--사원의 근무일수, 근무개월수를 출력하시오
--소수점 이하 자리수는 버림처리한다.
SELECT employee_id
,TRUNC(SYSDATE-hire_date, 0) "근무일수"
,TRUNC(MONTHS_BETWEEN(SYSDATE, hire_date)) "근무개월수"
FROM employees
ORDER BY 근무일수;
SELECT NEXT_DAY(SYSDATE, '토')
FROM DUAL;