2025-07-27 16:46

Tags: 프로그래밍 기초 SQL

함수

수학에서의 함수 처럼 매개변수를 받아 값을 반환하는 코드 블록 프로그래밍의 핵심 원칙 중 하나인 중복 제거 를 위해 필수적인 개념

함수를 파악하기 위해서는

  1. 인풋 (매개변수, 인수)
  2. 아웃풋(반환값) 이 두가지가 핵심이다.

SQL 에서의 함수

문자열함수

  1. CONCAT
    • 두 개 이상의 문자열을 연결합니다.
      SELECT CONCAT('Hello', ' ', 'World') AS Greeting; 결과
      Greeting
      Hello World
  2. SUBSTRING(MSSQL) 또는 SUBSTR(Oracle)
    • 문자열의 일부분을 추출합니다. 시작은 1부터, 보통 인덱스랑 다르다. 띄어쓰기는 포함 SELECT SUBSTRING('Hello World', 1, 5) AS SubStr; 결과
      SubStr Hello
  3. LENGTH(Oracle) 또는 LEN(MSSQL)
    • 문자열의 길이를 반환합니다.
      SELECT LENGTH('Hello World') AS Length;
      결과
      Length
      11
  4. REPLACE
    • 문자열의 일부분을 다른 문자열로 대체합니다.
      SELECT REPLACE('Hello World', 'World', 'SQL') AS Replaced;
      결과
      Replaced
      Hello SQL
  5. 문자열 변환
    1. UPPER
      문자열을 대문자로 변환합니다.
      SELECT UPPER(‘Hello World!‘) AS UpperCase;
      결과
      UpperCase
      HELLO WORLD

    2. LOWER
      문자열을 소문자로 변환합니다.
      SELECT LOWER(‘Hello World!‘) AS LowerCase;
      결과
      LowerCase
      hello world

  6. TRIM
    문자열의 양쪽 끝에서 공백을 제거합니다.
    SELECT TRIM(’ Hello World ’) AS Trimmed;
    결과
    Trimmed
    Hello World
    1. TRIM (SQL Server에서 특정 문자 제거)
      문자열의 양쪽에서 특정 문자를 제거할 수 있습니다.
      SELECT TRIM(‘x’ FROM ‘xxHello Worldxx’) AS Trimmed;
      결과
      Trimmed
      Hello World
  7. LTRIM
    왼쪽에서 특정 문자 제거, 특정문자 빈값인 경우 공백 제거
    SELECT LTRIM(‘xxHello Worldxx’, ‘x’) AS LTrimmed FROM dual;
    결과
    LTrimmed
    Hello Worldxx
    1. LTRIM
      왼쪽에서 특정 문자 제거, 특정문자 빈값인 경우 공백 제거
      SELECT LTRIM(’ Hello World ’) AS LTrimmed;
      결과
      LTrimmed
      Hello World
  8. RTRIM
    오른쪽에서 특정 문자 제거, 특정문자 빈값인 경우 공백 제거
    SELECT RTRIM(‘xxHello Worldxx’, ‘x’) AS RTrimmed FROM dual;
    결과
    RTrimmed
    xxHello World
    1. RTRIM
      오른쪽에서 특정 문자 제거, 특정문자 빈값인 경우 공백 제거
      SELECT RTRIM(’ Hello World ’) AS RTrimmed;
      결과
      RTrimmed
      Hello World
  9. LPAD
    문자의 설정한 길이가 될 때까지 왼쪽을 특정 문자로 채운다.
    SELECT LPAD(‘Hello’, 10, '*') AS LeftPadded;
    결과
    LeftPadded
    *****Hello
  10. RPAD
    문자의 설정한 길이가 될 때까지 오른쪽을 특정 문자로 채운다.
    SELECT RPAD(‘Hello’, 10, '*') AS RightPadded;
    결과
    RightPadded
    Hello*****
  11. CHAR
    ASCII 값을 문자로 변환합니다.
    SELECT CHAR(65) AS Character;
    결과
    Character
    A

숫자 함수

함수설명예시
ABS(숫자)절댓값ABS(-1) 1
SIGN(숫자)부호 반환. 양수면 1, 음수면 -1SIGN(3) 1
SIGN(-3) -1
ROUND(숫자, 소수점자리수)반올림, 소수점자리수가 없으면 생략 가능. 마이너스인 경우 그 자리에서 반올림한다.ROUND(181.67, 1) 181.7
ROUND(181.67, -2) 200
TRUNC(숫자, 소수점자리수)버림, 소수점자리수가 없으면 생략 가능. 마이너스인 경우 그 자리에서 버린다.TRUNC(181.67, 1) 181.6
TRUNC(181.67, -1) 180
CEIL(숫자)올림(크거나 같은 최소 정수)CEIL(181.67) 182
FLOOR(숫자)내림(작거나 같은 최대 정수)FLOOR(181.67) 181
FLOOR(-181.67) -182
MOD(숫자1, 숫자2)숫자1을 숫자2로 나눈 나머지MOD(15, 4) 3

날짜함수

함수 (Function)설명 (Description)예시 (Example)
SYSDATE(ORACLE) GETDATE(MSSQL)현재의 연,월,일,시,분,초 반환Select sysdate from dual; 2024-07-29 14:23:55
EXTRACT(특정부문 FROM 날짜)날짜나 시간 값에서 연도, 월, 일, 시, 분 등 특정 부분 추출SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL 2024
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL 7
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL 29
SELECT EXTRACT(HOUR FROM SYSDATE) FROM DUAL 14
SELECT EXTRACT(MINUTE FROM SYSDATE) FROM DUAL 23
SELECT EXTRACT(SECOND FROM SYSDATE) FROM DUAL 55
ADD_MONTHS날짜에 지정한 개월 수를 더한 날짜를 반환SELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL; 2024-10-29 14:23:55

명시적 형변환함수

함수설명예시
TO_CHAR(숫자, 형식), 형식은 옵션숫자나 날짜를 문자열로 변환SELECT TO_CHAR(12345) FROM DUAL;
12345(문자형태)
SELECT TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS’) FROM DUAL;
2024-07-29 14:23:55(날짜형태)
TO_DATE(문자열, 형식), 형식은 옵션문자열을 날짜로 변환SELECT TO_DATE(‘2024-07-29’, ‘YYYY-MM-DD’) FROM DUAL;
2024-07-29(문자형 입력)
YYYY : 년
MM : 월
DD : 일
HH : 시(12시)
HH24 : 시(24시)
MI : 분
SS : 초
TO_NUMBER(문자열)문자열을 숫자값으로 변환SELECT TO_NUMBER(‘12345’) FROM DUAL;
12345(숫자형)
CAST(A AS B)A의 형태를 B로 변경SELECT CAST(‘2024-07-29’ AS DATE) FROM DUAL;
문자 ‘2024-07-29’가 날짜 ‘2024-07-29’ 타입로 변경되어 출력

그룹 함수

함수명함수기능사용예시출력기타설명
COUNT(대상)행의 수 리턴SELECT COUNT(SAL) FROM EMP;각 연산 결과NULL 무시하고 연산
SUM(대상)총 합 리턴SELECT SUM(SAL) FROM EMP;각 연산 결과NULL 무시하고 연산
AVG(대상)평균 리턴SELECT AVG(SAL) FROM EMP;각 연산 결과NULL 무시하고 연산
MIN(대상)최소값 리턴SELECT MIN(SAL) FROM EMP;각 연산 결과NULL 무시하고 연산
MAX(대상)최대값 리턴SELECT MAX(SAL) FROM EMP;각 연산 결과NULL 무시하고 연산
VARIANCE(대상)분산 리턴SELECT VARIANCE(SAL) FROM EMP;각 연산 결과NULL 무시하고 연산
STDDEV(대상)표준편차 리턴SELECT STDDEV(SAL) FROM EMP;각 연산 결과NULL 무시하고 연산
  • SQL Server의 경우:
    • VARIANCE → VAR
    • STDDEV → STDEV

일반 함수

  • NVL, ISNULL: NULL 원하는 값
  • NULLIF : 같으면 NULL
함수명함수기능사용예시출력기타설명
DECODE(대상, 값1, 리턴1, 값2, 리턴2, …, 그외리턴)대상이 값1이면 리턴1, 값2와 같으면 리턴2, …, 그외에는 그외리턴값 리턴DECODE(DEPTNO,10,A,B)A 또는 B대소비교에 따른 치환 불가 그외리턴 생략 시 널 리턴
NVL(대상, 치환값)대상이 널이면 치환값으로, 널이 아니면 대상값으로 리턴NVL(COMM,0)COMM값 또는 0리턴
NVL2(대상, 치환값1, 치환값2)대상이 널이면 치환값2로, 널이 아니면 치환값1로 리턴NVL2(COMM,COMM*1.1,0)COMM*1.1값 또는 0리턴COMM값이 널이면 0, 널이 아니면 COMM*1.1 리턴
COALESCE(대상1, 대상2, …, 그외리턴)대상중 널이 아닌 값을 출력 (가장 첫번째부터) 거쳐 모두 널이면 그외리턴값 리턴COALESCE(NULL, 100)100그외리턴값 생략 시 널 리턴
ISNULL(대상, 치환값)대상이 널이면 치환값으로 리턴ISNULL(NULL, 100)100SQL SERVER 함수
NULLIF(대상1, 대상2)두 값이 같으면 널 리턴, 다르면 대상값1 리턴NULLIF(10,20)10
CASE문조건별 치환 및 연산 수행별도 참고별도 참고

CASE문 사용 예제1

SELECT SAL,
       CASE WHEN SAL < 2000 THEN 'C'
            WHEN SAL < 3000 THEN 'B'
            ELSE 'A'
       END AS SAL_GRADE
FROM EMP;

Result (결과):

SALSAL_GRADE
800C
1600C
1250C
2975B
1250C
2850B
3000A
800C
3000A

CASE문 사용 예제2

SELECT DEPTNO,
       CASE DEPTNO WHEN 10 THEN '인사부'
                   WHEN 20 THEN '총무부'
                   WHEN 30 THEN '영업부'
		                   ELSE '기타'
       END AS DNAME1,
       CASE WHEN DEPTNO = 10 THEN '인사부'
            WHEN DEPTNO = 20 THEN '총무부'
            WHEN DEPTNO = 30 THEN '영업부'
					         ELSE '기타'
       END AS DNAME2
FROM EMP;
DEPTNODNAME1DNAME2
10인사부인사부
10인사부인사부
20총무부총무부
10인사부인사부
30영업부영업부
30영업부영업부
20총무부총무부
30영업부영업부
20총무부총무부