SQL

02. 함수(FUNCTION) PART.2

비보호신호등 2024. 8. 13. 15:33

<숫자처리함수>

ABS

숫자의 절대값을 구해주는 함수

 

1
SELECT ABS(-10), ABS(-6.3FROM DUAL;
cs

 

MOD

두 수를 나눈 나머지값을 반환

 

1
SELECT MOD(10,3FROM DUAL;
cs

 

ROUND

반올림한 결과를 반환

ROUND(NUMBER, [위치])

 

1
SELECT ROUND(123.456FROM DUAL;
cs

기본자리수는 소수점 첫번째 자리에서 반올림

 

CEIL

올림처리를 위한 함수

CEIL(NUMBER)

1
SELECT CEIL(123.456FROM DUAL;
cs

 

FLOOR, TRUNC

버림처리함수

TRUNC(NUMBER, [위치])

 

1
SELECT TRUNC(123.952FROM DUAL;
cs

<날짜 처리 함수>

SYSDATE : 시스템의 현재 날짜 및 시간을 반환

 

1
SELECT SYSDATE FROM DUAL;
cs

현재의 날짜를 반환

MONTH_BETWEEN : 두 날짜 사이의 개월 수

EX

사원들의 사원명, 입사일, 근무일수 , 근무 개월수 조회

1
2
3
SELECT EMP_NAME, HIRE_DATE, FLOOR(SYSDATE - HIRE_DATE),
       CEIL(MONTHS_BETWEEN(SYSDATE, HIRE_DATE))
FROM EMPLOYEE;
cs

 

ADD_MONTH : 특정 날짜에 NUMBER개월수를 더해서 반환

현재의 날에서 4개월 뒤의 날을 반환

 

EXTRACT : 특정 날짜로부터 년|월|일 값을 추출해서 반환하는 함수

 

[표현법]
    EXTRACT(YEAR FROM DATE) : 연도만 추출
    EXTRACT(MONTH FROM DATE) : 월만 추출
    EXTRACT(DAY FROM DATE) : 일만 추출

 

EX)

사원의 사원명, 입사년도, 입사월, 입사일을 조회

 

1
2
3
4
5
6
SELECT EMP_NAME,
      EXTRACT(YEAR FROM HIRE_DATE) AS "입사년도",
      EXTRACT(MONTH FROM HIRE_DATE) AS "입사월",
      EXTRACT(DAY FROM HIRE_DATE) AS "입사일"
FROM EMPLOYEE
ORDER BY 2,3,4;
cs

 

 

TO_DATE : 숫자타입 또는 문자타입을 날짜타입으로 변경하는 함수

[표현식]

TO_DATE(숫자 | 문자, [포맷]) --> DATE

 

1
SELECT TO_DATE(20100101FROM DUAL;
cs

 

 

<NULL 처리함수>

NVL(컬럼, 해당컬림이 NULL일 경우 보여줄 값)

 

1
2
SELECT EMP_NAME, NVL(BONUS,0)
FROM EMPLOYEE;
cs

NVL을 하기 전 NVL을 한 후

 

<선택함수>

DECODE(비교하고자하는 대상(컬럼, 연산식, 함수식), 비교값1, 결과값1, 비교값2, 결과값2...)

 

EX)

사번, 사원명, 주민번호, 성별

1
2
3
SELECT EMP_ID, EMP_NAME, EMP_NO,
       DECODE(SUBSTR(EMP_NO, 81),'1''남''2''여','3','남','4','여','외계인'"성별"
FROM EMPLOYEE;
cs

 

주민번호 뒷자리가 1,2는 남 3,4는 여로 나오게 했고 만약 1,2,3,4말고 다른 숫자라면 외계인이 나오게끔 한 코드

<CASE WHEN THEN>

[표현식]  --(자바에서 IF문과 비슷한 느낌)

CASE
        WHEN 조건식 1 THEN 결과값1
        WHEN 조건식 2 THEN 결과값2
        ...
        ELSE 결과값
    END

EX)

급여가 500만원 이상이면 고급 300만원 이상이면 중급 그 외에는 초급인 사원명과 월급

1
2
3
4
5
6
SELECT EMP_NAME, SALARY,
       CASE WHEN SALARY >= 5000000 THEN '고급'
            WHEN SALARY >= 3000000 THEN '중급'
            ELSE '초급' 
        END AS 인력
FROM EMPLOYEE;
cs

 

 

 

<SUM(숫자타입컬럼)>

해당컬럼 값들의 총 합계를 구해서 반환해주는 함수

 

EX)

근로자테이블의 전사원의 총 급여를 구해라

1
2
3
SELECT SUM(SALARY)
FROM EMPLOYEE;
 
cs

 

<AVG>

해당 컬럼값들의 평균을 구해서 반환해주는 함수

 

EX)

근로자테이블의 전사원의 급여의 평균 값을 구해라

1
2
SELECT ROUND(AVG(SALARY))
FROM EMPLOYEE;
cs

 

<MIN>

해당 컬럼값 중 가장 작은 값을 구해서 반환

1
2
3
SELECT MIN(EMP_NAME), MIN(SALARY)
FROM EMPLOYEE;
 
cs

<MAX>

해당 컬럼값 중 가장 큰 값을 구해서 반환

1
2
SELECT MAX(EMP_NAME), MAX(SALARY), MAX(HIRE_DATE)
FROM EMPLOYEE;
cs