오라클 단일 함수

DB

2020. 11. 17.

--문자함수
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;

'DB' 카테고리의 다른 글

[스크랩] MariaDB에서 특정 테이블의 모든 컬럼명 찾기  (0) 2021.03.15
오라클 조인  (0) 2020.11.18
오라클 일반 함수  (0) 2020.11.17
오라클 변환 함수  (0) 2020.11.17
그룹 함수  (0) 2020.11.17