숫자형 함수
숫자형 함수는 숫자를 입력받고 그대로 숫자를 리턴한다.
ROUND 함수
ROUND 함수는 열, 표현식 또는 값을 소수점 N 자리로 반올림한다.
두 번째 인자가 0이거나 생략되면, 값은 소수점 위치가 0으로 반올림된다.
두 번째 인자가 2이면, 값은 소수점 아래 두 번째 위치로 반올림된다.
반대로, 두 번째 인자가 -2 라면 값은 소수점 좌측의 두 번쨰 위치로 반올림 된다.
SELECT ROUND(45.923, 2), ROUND(45.923, 0), ROUND(45.923) FROM DUAL;
TRUNC 함수
TRUNC 함수는 열, 표현식 또는 값을 소수점 N 자리로 절삭한다.
TRUNC 함수는 ROUND 함수와 유사한 인수로 작업을 수행한다.
SELECT TRUNC(45.923, 2), TRUNC(45.923, 0), TRUNC(45.923, -1) FROM DUAL;
ABS
ABS 함수는 입력된 정수의 절대값을 반환한다.
SELECT ABS(-45) FROM DUAL;
FLOOR 와 CEIL 함수
- FLOOR : 표현식 중 가장 큰 값 반환
- CEIL : 표현식 중 가장 작은 값 반환
SELECT FLOOR(3.14), CEIL(3.14) FROM DUAL;
FLOOR 는 가장 큰 수를 반환하기 때문에 3을 반환
CEIL은 가장 작은 수를 반환하기 때문에 0.04인 4를 반환한다.
MOD
나눗셈의 몫이 아닌 나머지 값을 반환한다.
SELECT 10 / 3, MOD(10,3) FROM DUAL;
날짜 함수
오라클은 세기, 년, 월, 일, 시간, 분 ,초의 내부 숫자형식으로 날짜를 저장한다.
디폴트 날짜 형식은 'DD-MM-YY'이다. 시스템에 따라 'YY-MM-DD'가 될 수 있다.
SYSDATE
현재 날짜를 반환하는 함수이다.
SYSTIMESTAMP
현재의 날짜와 시간을 반환하는 함수이다.
데이터베이스는 날짜를 숫자로 저장하기 때문에, 더하기와 빼기 같은 산술연산자를 사용하여 계산을
수행 할 수 있다. 날짜 뿐만 아니라 숫자 상수를 더하거나 뺄 수 있다.
SELECT FIRST_NAME, SYSDATE - HIRE_DATE FROM EMPLOYEES;
SELECT FIRST_NAME, (SYSDATE - HIRE_DATE)/7 FROM EMPLOYEES;
SELECT FIRST_NAME, (SYSDATE - HIRE_DATE)/365 FROM EMPLOYEES;
ROUND 와 TRUNC
- ROUND 함수는 포맷 모델 fmt에 명시된 단위에 대해 반올림한 date를 반환한다.
fmt가 생략되면, date를 가장 가까운 날짜로 반올림한다. - TRUNC 함수는 포맷 모델 fmt에 명시된 단위에 대해 절삭한 date를 반환한다.
fmt가 생략되면, date는 가장 가까운 날짜로 절삭된다.
- "월" 기준 ROUND 와 TRUNC
SELECT ROUND(SYSDATE, 'MONTH'), TRUNC(SYSDATE, 'MONTH') FROM DUAL;
- "년" 기준 ROUND 와 TRUNC
SELECT ROUND(SYSDATE, 'YEAR'), TRUNC(SYSDATE, 'YEAR') FROM DUAL;
변환 함수
어떤 데이터 타입의 값을 다른 데이터 타입의 값으로 반환한다.
▶ 형 변환의 개념으로 이해하면 이해에 용이하다.
- 값 할당 ( Assignment)
▶ 값 할당 시, 오라클은 자동으로 다음을 변환할 수 있다.
위 EMPLOYEES 테이블의 SALARY 컬럼은 모든 값들이 정수형으로 이루어져있다.
하지만 ORACLE은 자동형변환을 지원하기 때문에 아래와 같이 SQL문을 작성해도 알아서 인식을 한다.
SELECT * FROM EMPLOYEES WHERE SALARY > '10000';
위 구문에서는 SALARY가 10000보다 클 때라는 조건을 주었지만, 10000을 정수형이 아닌, 문자형으로 작성하여도
자동형변환이 적용되어 아래와 같이 결과값이 출력된다.
CHAR
날짜를 문자로 변환하기 위해 TO_CHAR 함수를 사용한다.
날짜 형식을 지정하기 위해서 format을 지정하며, format은 단일 인용부호로 둘러싸여 있다.
어떤 타당한 날짜 형식 요소도 포함될 수 있다.
추가된 공백을 제거하거나 앞부분의 0을 없애기 위해 Fill Mode 요소를 사용한다.
날짜 포멧
숫자 포멧 형식
순수한 날짜
SELECT SYSDATE FROM DUAL;
순수한 날짜 형식에서 문자 형식으로의 변환
SELECT TO_CHAR(SYSDATE) FROM DUAL;
원하는 날짜 형식으로 변환
SELECT TO_CHAR(SYSDATE, 'YY.MM.DD HH:MI:SS') FROM DUAL;
월급을 환율로 환산하고, 원화표기로 변경
SELECT FIRST_NAME, TO_CHAR(SALARY*1302.69, 'L999,999,999,9999.99') FROM EMPLOYEES;
TO_NUMBER
문자 스트링을 숫자 형식으로 변환시킨다.
▶ 다만, 옳지 않은 형식이 들어온다면, 에러가 발생한다.
SELECT TO_NUMBER('$5,500' , '$9999') - 4000 FROM DUAL;
TO_DATE
문자 스트링을 날짜 형식으로 변환시킨다.
SELECT TO_DATE('2023년12월04일', 'YYYY"년"MM"월"DD"일"') FROM DUAL;
SELECT TO_CHAR(TO_DATE('20050402', 'YYYY/MM/DD'), 'YYYY"년"MM"월"DD"일"') FROM DUAL;
NVL 함수
NULL 값을 실제 값으로 변환하기 위해서, NVL 함수를 사용한다.
사용될 수 있는 데이터타입은 날짜, 문자, 숫자입니다.
- expr1과 expr2 데이터 타입은 서로 일치해야한다.
SELECT SALARY,COMMISSION_PCT, SALARY + SALARY* NVL(COMMISSION_PCT,0) FROM EMPLOYEES;
NVL2 함수
expr1 값이 NULL 이 아닐 경우에는 expr2 값을 반환하고, NULL 일 경우에는 expr3의 값을 반환한다.
▶ expr1의 타입이 expr2, expr3 의 타입과 같지 않아도 된다.
SELECT NVL2(300, 'NULL이 아닙니다', 'NULL입니다'), NVL2(NULL, 'NULL이 아닙니다', 'NULL입니다') FROM DUAL;
SELECT FIRST_NAME, NVL2(COMMISSION_PCT, SALARY+SALARY*COMMISSION_PCT, SALARY) FROM EMPLOYEES;
▶ COMMISSION_PCT가 NULL 값이 아니라면 2번째 인자를 NULL이라면 3번째 인자를 출력
'Programming > Database' 카테고리의 다른 글
[Database] 함수 - 집합연산자와 분석함수 (1) | 2023.12.05 |
---|---|
[Database] 여러 함수 (0) | 2023.12.04 |
[Database] 함수 : 문자형 (0) | 2023.12.01 |
[Database] DML TEST (0) | 2023.12.01 |
[Database] DML(Data Manipulation Language) (0) | 2023.12.01 |