코진남

오라클 데이터 처리 가공 함수모음 본문

Database

오라클 데이터 처리 가공 함수모음

woojin126 2021. 12. 12. 15:21

대,소문자를 바꿔주는 UPPER,LOWER,INITCAP 함수

*UPPER(문자열):괄호 안 문자 데이터를 모두 대문자로 변환하여 반환

*LOWER(문자열):괄호 안 문자 데이터를 모두 소문자로 변환

*INITCAP(문자열):괄호 안 문자 데이터 중 첫 글자는 대문자로, 나머지 문자를 소문자로 변환 후 반환

ex)

SELECT ENAME,UPPER(ENAME),LOWER(ENAME),INITCAP(ENAME) FROM EMP;

ex2) UPPER 함수로 문자열 비교하기(사원 이름 SCOTT인 데이터 찾기)

SELECT * FROM EMP WHERE UPPER(ENAME) = UPPER('scott');

ex3) UPPER 함수로 문자열 비교하기(사원 이름에 SCOTT 단어를 포함한 단어찾기)

SELECT * FROM EMP WHERE UPPER(ENAME) LIKE UPPER('%scott%');

문자열 길이를 구하는 LENGTH 함수

특정 문자열의 길이를 구할 때 사용

ex)ENAME 열의 길이 구해보기

SELECT ENAME,LENGTH(ENAME) FROM EMP;

ex2)이름의 길이가 5이상인 행 출력해보자

SELECT ENAME,LENGTH(ENAME) FROM EMP WHERE LENGTH(ENAME) >=5;

TIP)LENGTH, LENGTHB 차이는 문자열,바이트수 차이

문자열 일부를 추출하는 SUBSTR 함수

*SUBSTR(문자열 데이터,시작 위치, 추출 길이) : 문자열 데이터 시작위치부터 추출 길이만큼 추출,

시작 위치가 음수일 경우 마지막 위치부터 거슬러 올라간 위치에서 시작

*SUBSTR(문자열 데이터,시작 위치):문자열 데이터의 시작 위치부터 문자열 데이터 끝까지 추출, 시작 위치가 음수일 경우 마지막 위치부터 거슬러 올라간 위치에서 끝까지 추출

ex)

SELECT JOB,SUBSTR(JOB,1,2),SUBSTR(JOB,3,2),SUBSTR(JOB,5) FROM EMP;

ex2) SUBSTR 함수 안에 다른 함수(LENGTH) 같이 사용해보자

SELECT JOB,

SUBSTR(JOB,-LENGTH(JOB)),

SUBSTR(JOB,-LENGTH(JOB),2),

SUBSTR(JOB,-3)

FROM EMP;

특정 문자를 다른 문자로 바꾸는 REPLACE 함수

REPLACE 함수는 특정 문자열 데이터에 포함된 문자를 다른 문자로 대체할 경우에 유용하다.

REPLACE([문자열 데이터 또는 열 이름(필수)],[찾는 문자(필수)],[대체할 문자(선택)])

ex)문자열 안에 있는 특정 문자 바꿔보기

SELECT '010-1234-5678' AS REPLACE_BEFORE,

REPLACE('010-1234-5678','-',' ') AS REPLACE_1,

REPLACE('010-1234-5678','-') FROM EMP;

데이터의 빈 공간을 특정 문자로 채우는 LPAD,RPAD 함수

*LPAD 는 데이터 자리수를 지정한후 데이터 길이가 지정한 자리수보다 작을경우 나머지공간을 특수문자로 대체

*RPAD는 왼쪽을 특수문자로 대체

ex)

SELECT 'ORACLE',LPAD('ORACLE',10,'#') AS LPAD,

RPAD('ORACLE',10,'*') AS RPAD

FROM EMP;

두 문자열 데이터를 합치는 CONCAT 함수

CONCAT함수는 두 개의 문자열 데이터를 하나의 데이터로 연결해주는 역할.

ex)

SELECT CONCAT(EMPNO,ENAME),

CONCAT(EMPNO,CONCAT(' : ',ENAME))

FROM EMP

WHERE ENAME='KING';

특정 위치에서 반올림하는 ROUND 함수

ROUND 함수는 TRUNC 함수와 많이사용하는 것중 하나, 특정 숫자를 반올림하되 반올림할 위치를 지정할수 있음

지정하지않으면 소수점 첫째자리에서 반올림한 결과가 반환.

*ROUND([숫자(필수)],[반올림 위치(선택)])

ex)

SELECT ROUND(1234.5678) AS ROUND,

ROUND(1234.5678,0) AS ROUND_0,

ROUND(1234.5678,1) AS ROUND_1,

ROUND(1234.5678,2) AS ROUND_2,

ROUND(1234.5678,-1) AS ROUND_MINUS1

FROM DUAL;

특정 위치에서 버리는 TRUNC 함수

*TRUNC([숫자(필수)],[버림위치선택])

ex)

지정한 숫자와 가까운 정수 찾는 CEIL,FLOOR 함수

예제를보면 그냥 알수있다.

ex)

SELECT CEIL(3.14),

FLOOR(3.14) FROM DUAL;

날짜 데이터 함수

연산
설명
날짜 데이터 + 숫자
날짜 데이터보다 숫자만큼 일수 이후의 날짜
날짜 데이터 - 숫자
날짜 데이터보다 숫자만큼 일수 이전의 날짜
날짜 데이터 - 날짜 데이터
두 날짜 데이터 간의 일수 차이
날짜 데이터 + 날짜 데이터
연산 불가, 지원하지 않음

ex) SYSDATE 함수를 사용해서 날짜 출력해보자

SELECT SYSDATE AS NOW,

SYSDATE-1 AS YESTERDAY,

SYSDATE+1 AS TOMORROW

FROM DUAL;

몇 개월 이후 날짜를 구하는 ADD_MONTHS 함수

ADD_MONTHS 함수는 특정 날짜에 지정한 개월 수 이후 날짜 데이터를 반환하는 함수.

다음과 같이 날짜형 데이터 그리고 더할 개월 수를 정수로 지정하여 사용

*ADD_MONTHS([날짜 데이터(필수)], [더할 개월 수(정수)(필수)])

ex) SYSDATE와 ADD_MONTHS 함수로 3개월 후 날짜 구해보자

SELECT SYSDATE,ADD_MONTHS(SYSDATE,3) FROM DUAL;

ex2)10주년이 되는 사원들 데이터 추출

SELECT EMPNO,ENAME,HIREDATE,

ADD_MONTHS(HIREDATE,120) AS WORK10YEAR FROM EMP;

ex3) 입사 32년 미만인 사원 데이터출력 해보기

SELECT EMPNO,ENAME,HIREDATE FROM EMP WHERE ADD_MONTHS(HIREDATE,384) > SYSDATE;

ex4)HIREDATE와 SYSDATE의 사이의 개월 수를 MONTHS_BETWEEN 함수로 출력 (소수점 0번쨰자른것도포함)

SELECT EMPNO,ENAME,HIREDATE,SYSDATE, MONTHS_BETWEEN(SYSDATE,HIREDATE) AS MONTH

,TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE)) AS MONTHTRUNC FROM EMP;

돌아오는 요일,달의 마지막 날짜를 구하는 NEXT_DAY, LAST_DAY 함수

*NEXT_DAY([날짜 데이터(필수)],[요일 문자(필수)])

ex) 두개의 함수를 사용해보자

SELECT SYSDATE,

NEXT_DAY(SYSDATE,'월요일'),

LAST_DAY(SYSDATE)

FROM DUAL;

날짜 반올림,버림 하는 ROUND,TRUNC함수

숫자 데이터의 반올림,버림 처리에 사용한 ROUND,TRUNC 함수는 날짜 데이터를 입력데이터로 사용할수

있다. 소수점 위치 정보를 입력하지 않고 반올림,버림의 기주니될 포맷값 지정

입력 데이터 종류 사용방식

*숫자데이터 ROUND([숫자(필수)],[반올림 위치])

TRUNC([숫자(필수)],[버림 위치])

*날짜데이터 ROUND([날짜데이터(필수)],[반올림 기준 포멧])

TRUNC([날짜데이터(필수)],[버림 기준 포맷])

NULL 처리함수

NVL 함수의 기본 사용법

*NVL([NULL인지 여부를 검사할 데이터 또는 열(필수)],[앞의 데이터가 NULL일 경우 반환할 데이터(필수))

ex)

NVL 함수를 사용해 출력해보자

SELECT EMPNO,ENAME,SAL,COMM,SAL+COMM,

NVL(COMM,0),

SAL+NVL(COMM,0)

FROM EMP;

NVL2 함수의 기본 사용법

NVL2 함수는 NVL과 비슷하지만 NULL이 아닐때 반환할 데이터를 추가로 지정가능

ex) COMM 값이 있으면 O 아니면 X

SELECT EMPNO,ENAME,COMM,

NVL2(COMM,'O','X'),

NVL2(COMM,SAL*12+COMM,SAL*12) AS ANSAL

FROM EMP;

CASE 문

CASE [검사 대상이 될 열 또는 데이터, 연산이나 함수의 결과(선택)]

WHEN[조건1] THEN [조건 1의 결과 값이 TRUE 일때 반환할 결과]

WHEN[조건2] THEN [조건 2의 결과 값이 TRUE 일때 반환할 결과]

WHEN[조건3] THEN [조건 3의 결과 값이 TRUE 일때 반환할 결과]

ELSE [위 조건1~조건n과 일치하는 경우가 없을 때 반환할 결과]

END

ex)각직업마다 추가 봉급주고 나머지 ELSE 는 1.03배 해주기

SELECT EMPNO,ENAME,JOB,SAL

, CASE JOB

WHEN 'MANAGER' THEN SAL*1.1

WHEN 'SALESMAN' THEN SAL*1.2

WHEN 'ANALYST' THEN SAL

ELSE SAL*1.03

END AS UPSAL

FROM EMP;

TIP) 기준 데이터 없이도 가능

EX)

SELECT EMPNO,ENAME,COMM

CASE

WHEN COMM IS NULL THEN '해당사항없음'

WHEN VCOMM = 0 THEN '수당없음'

END AS COMM_TEXT

FROM EMP;

'Database' 카테고리의 다른 글

트랜잭션  (0) 2021.12.12
다중행 서브쿼리  (0) 2021.12.12
서브쿼리,단일행 서브쿼리  (0) 2021.12.12
서브쿼리 ON, WHERE 차이점  (0) 2021.12.12
서브쿼리 란?  (0) 2021.12.12