본문 바로가기
Programming/Database

[Database] 함수 : 숫자, 날짜 함수 그리고 변환 함수

by 공부합시다홍아 2023. 12. 4.
 

[Database] 함수 : 문자형

[Database] DML TEST [Database] DML(Data Manipulation Language) Oracle Database 설치 및 동작 확인 설치 방법 Database Software Downloads | Oracle 대한민국 Run the Oracle Database Enterprise Edition Container Image with Docker Contains Oracle D

hong-study.tistory.com


숫자형 함수

숫자형 함수는 숫자를 입력받고 그대로 숫자를 리턴한다.


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번째 인자를 출력

728x90

'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