2025-07-27 16:46
함수
수학에서의 함수 처럼 매개변수를 받아 값을 반환하는 코드 블록 프로그래밍의 핵심 원칙 중 하나인 중복 제거 를 위해 필수적인 개념
함수를 파악하기 위해서는
- 인풋 (매개변수, 인수)
- 아웃풋(반환값) 이 두가지가 핵심이다.
SQL 에서의 함수
문자열함수
- CONCAT
- 두 개 이상의 문자열을 연결합니다.
SELECT CONCAT('Hello', ' ', 'World') AS Greeting;
결과
Greeting
Hello World
- 두 개 이상의 문자열을 연결합니다.
- SUBSTRING(MSSQL) 또는 SUBSTR(Oracle)
- 문자열의 일부분을 추출합니다. 시작은 1부터, 보통 인덱스랑 다르다. 띄어쓰기는 포함
SELECT SUBSTRING('Hello World', 1, 5) AS SubStr;
결과
SubStr Hello
- 문자열의 일부분을 추출합니다. 시작은 1부터, 보통 인덱스랑 다르다. 띄어쓰기는 포함
- LENGTH(Oracle) 또는 LEN(MSSQL)
- 문자열의 길이를 반환합니다.
SELECT LENGTH('Hello World') AS Length;
결과
Length
11
- 문자열의 길이를 반환합니다.
- REPLACE
- 문자열의 일부분을 다른 문자열로 대체합니다.
SELECT REPLACE('Hello World', 'World', 'SQL') AS Replaced;
결과
Replaced
Hello SQL
- 문자열의 일부분을 다른 문자열로 대체합니다.
- 문자열 변환
-
UPPER
문자열을 대문자로 변환합니다.
SELECT UPPER(‘Hello World!‘) AS UpperCase;
결과
UpperCase
HELLO WORLD -
LOWER
문자열을 소문자로 변환합니다.
SELECT LOWER(‘Hello World!‘) AS LowerCase;
결과
LowerCase
hello world
-
- TRIM
문자열의 양쪽 끝에서 공백을 제거합니다.
SELECT TRIM(’ Hello World ’) AS Trimmed;
결과
Trimmed
Hello World- TRIM (SQL Server에서 특정 문자 제거)
문자열의 양쪽에서 특정 문자를 제거할 수 있습니다.
SELECT TRIM(‘x’ FROM ‘xxHello Worldxx’) AS Trimmed;
결과
Trimmed
Hello World
- TRIM (SQL Server에서 특정 문자 제거)
- LTRIM
왼쪽에서 특정 문자 제거, 특정문자 빈값인 경우 공백 제거
SELECT LTRIM(‘xxHello Worldxx’, ‘x’) AS LTrimmed FROM dual;
결과
LTrimmed
Hello Worldxx- LTRIM
왼쪽에서 특정 문자 제거, 특정문자 빈값인 경우 공백 제거
SELECT LTRIM(’ Hello World ’) AS LTrimmed;
결과
LTrimmed
Hello World
- LTRIM
- RTRIM
오른쪽에서 특정 문자 제거, 특정문자 빈값인 경우 공백 제거
SELECT RTRIM(‘xxHello Worldxx’, ‘x’) AS RTrimmed FROM dual;
결과
RTrimmed
xxHello World- RTRIM
오른쪽에서 특정 문자 제거, 특정문자 빈값인 경우 공백 제거
SELECT RTRIM(’ Hello World ’) AS RTrimmed;
결과
RTrimmed
Hello World
- RTRIM
- LPAD
문자의 설정한 길이가 될 때까지 왼쪽을 특정 문자로 채운다.
SELECT LPAD(‘Hello’, 10,'*'
) AS LeftPadded;
결과
LeftPadded
*****Hello
- RPAD
문자의 설정한 길이가 될 때까지 오른쪽을 특정 문자로 채운다.
SELECT RPAD(‘Hello’, 10,'*'
) AS RightPadded;
결과
RightPadded
Hello***** - CHAR
ASCII 값을 문자로 변환합니다.
SELECT CHAR(65) AS Character;
결과
Character
A
숫자 함수
함수 | 설명 | 예시 |
---|---|---|
ABS(숫자) | 절댓값 | ABS(-1) → 1 |
SIGN(숫자) | 부호 반환. 양수면 1, 음수면 -1 | SIGN(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) | 100 | SQL 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 (결과):
SAL | SAL_GRADE |
---|---|
800 | C |
1600 | C |
1250 | C |
2975 | B |
1250 | C |
2850 | B |
3000 | A |
800 | C |
3000 | A |
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;
DEPTNO | DNAME1 | DNAME2 |
---|---|---|
10 | 인사부 | 인사부 |
10 | 인사부 | 인사부 |
20 | 총무부 | 총무부 |
10 | 인사부 | 인사부 |
30 | 영업부 | 영업부 |
30 | 영업부 | 영업부 |
20 | 총무부 | 총무부 |
30 | 영업부 | 영업부 |
20 | 총무부 | 총무부 |