SQL

[SQL] SQL 함수

beginner-in-coding 2025. 2. 13. 17:37

* ORACLE 기준 함수 정의*


01. 함수 정의

  • INPUT VALUE → (FUNCTION) → OUTPUT VALUE
  • FUNCTION: INPUT VALUE와 OUTPUT VALUE의 관계를 정의한 객체
  • FROM절을 제외한 모든 절에서 사용 가능

02. 함수 기능

  • 기본적인 쿼리문을 더 강력하게 만듬
  • 데이터의 계산을 수행
  • 개별 데이터의 항목을 수정
  • 표시할 날짜 및 숫자 형식을 지정
  • 열 데이터의 유형(DATA TYPE)을 변환

03. 함수의 종류  - 입력값의 수에 따라 분류

  • 단일행 함수: INPUT과 OUTPUT의 관계 = 1:1
  • 복수행 함수: 여러 건의 데이터를 동시에 입력받아서 하나의 요약값을 리턴
    • 같은 용어: 그룹 함수, 집계 함수

단일행 함수와 복수행 함수의 INPUT OUPUT의 관계


04. 함수의 종류  - 입/출력값의 타입에 따라 분류


  • 문자형 함수
    • 문자열 결함, 추출, 삭제 등을 수행
    • 단일행 함수 형태
    • OUTPUT: (대부분) 문자값(LENGTH, INSTR 제외)
함수명 함수 기능 기타 설명
LOWER(대상) 소문자로 변환  
UPPER(대상) 대문자로 변환  
SUBSTR(대상, m, n) m의 위치에서부터 n개 자름  
INSTR(대상, 찾을문자열, m, n) m의 위치에서 n번째 위치를 찾음 * n 생략: 끝까지 추출
* 음수(-): 뒤에서부터
LTRIM(대상, 삭제문자열) 왼쪽을 기준으로 '삭제문자열' 삭제 * m, n 생략: 1로 해석
* LTRIM
(대상, 삭제문자열, 찾는위치, 몇 번째)
: 함수에 추가적으로 '찾는위치'부터
'몇 번째'의 '대상'을
삭제할지 지정할 수 있음 
RTRIM(대상, 삭제문자열) 오른쪽을 기준으로 '삭제문자열' 삭제 * 삭제문자열 생략: 공백 삭제
TRIM(대상) 양쪽을 기준으로 '삭제문자열' 삭제
LPAD(대상, n, 문자열) '대상' 왼쪽에 문자열을 추가해서 총 n의 길이 리턴  
RPAD(대상, n, 문자열) '대상' 오른쪽에 문자열을 추가해서 총 n의 길이 리턴  
CONCAT(대상1, 대상2) 문자열 결합 * 두 개의 인수만 전달 가능
LENGTH(대상) 문자열 길이 반환  
REPLACE
(대상, 찾을문자열, 바꿀문자열)
문자열 치환 및 삭제 * '바꿀 문자열' 생략 || 빈 문자열 전달
: 찾는 문자열 삭제 가능
TRANSLATE
(대상, 찾을문자열, 바꿀문자열)
글자를 1:1로 치환 * 매칭되는 글자끼리 치환
* 문자열인 경우 한 세트
* 빈 문자열 전달: NULL 리턴

  • 숫자형 함수
    • 숫자 입력 → 숫자 값 반환
    • 단일행 함수 형태의 숫자함수 (1:1)
    • ORACLE과 SQL Server  함수 거의 동일
함수명 함수 기능 기타 설명
ABS(숫자) 절대값 반환  
ROUND(숫자, 자리수) 소수점 특정 자리수에서 반올림 * '자리수'까지 자르는 것이므로
자리수+1에서 반올림
* 자리수가 음수인 경우
: 정수 자리에서 반올림
TRUNC(숫자, 자리수) 소수점 특정 자리수에서 버림  
SIGN(숫자) 숫자 양수: 1 / 음수: -1 / 0: 0 반환   
FLOOR(숫자) 작거나 같은 최대 정수 반환  
CEIL(숫자) 크거나 같은 최소 정수 반환  
MOD(숫자1, 숫자2) 숫자1 % 숫자2 (나머지) 반환  
POWER(m, n) m^n  
SORT(숫자) 루트값 리턴  

  • 날짜형 함수
    • 날짜 연산과 관련된 함수
    • ORACLE과 SQL Server 함수 거의 다름
함수명 함수 기능 기타 설명
SYSDATE 현재 날짜 + 시간 리턴 * 날짜 출력 형식에 따라 다르게 출력
(날짜만 출력될 수 있음)
CURRENT_DATE 현재 날짜 리턴 * 날짜 출력 형식에 따라 다르게 출력
(시간이 출력될 수 있음)
CURRENT_TIMESTAMP 현재 타임스탬프 리턴  
ADD_MONTHS(날짜, n) 날짜에서 n개월 후 날짜 리턴 * n이 음수: n개월 이전 날짜 리턴
MONTHS_BETWEEN
(날짜1, 날짜2)
날짜1과 날짜 2의 개월 수 리턴 * 날짜1 < 날짜2: 음수 리턴
LAST_DAY(날짜) 주어진 월의 마지막 날짜 리턴  
NEXT_DAY(날짜, n) 주어진 날짜 이후 지정된 요일의 첫 번째 날짜 리턴 * 1~7: 일~토요일
ROUND(날짜, 자리수) 날짜 반올림 * 월 이전 자리에서 반올림
TRUNC(날짜, 자리수) 날짜 버림 * 월 이전 자리에서 버림

  • 변환 함수
    • 값의 데이터 타입을 변환
    • 문자 → 숫자, 숫자 → 문자, 날짜 → 문자, 문자 → 날짜
함수명 함수 기능 기타 설명
TO_NUMBER(문자) 숫자 타입으로 변경  
TO_CHAR(대상, 포맷) 1) 날짜의 포맷 변경  
2) 숫자의 포맷 변경  
TO_DATE(대상, 포맷) 주어진 문자를 포맷 형식에 맞게 읽어 날짜로 리턴  
FORMAT(날짜, 포맷) 날짜의 포맷 변경  
CAST(대상 AS 데이터타입) 대상을 주어진 데이터타입으로 변환  

  • 그룹 함수
    • 다중행 함수
    • 여러 값이 INPUT값으로 들어가서 하나의 요약된 값으로 리턴
    • GROUP BY와 함께 자주 사용
    • ORACLE과 SQL Server 거의 동일
함수명 함수 기능 기타 설명
COUNT(대상) 행의 수 리턴 * NULL 행은 무시하고 연산
SUM(대상) 총 합 리턴
AVG(대상) 평균 리턴
MIN(대상) 최솟값 리턴
MAX(대상) 최댓값 리턴
VARIANCE(대상) 분산 리턴
STDDEV(대상) 표준편차 리턴

  • 일반 함수
    • 기타 함수: 널 치환 함수 등
함수명 함수 기능 기타 설명
DECODE(대상, 값1, 리턴1,
값2, 리턴2, ..., 그외리턴)
Switch(대상) {
case(값1):
return 리턴1;
case(값1):
return 리턴1;
...
default:
return 그외리턴;
}          
* 대소비교에 따른 치환 불가
* 그 외 리턴 생략: NULL 리턴
NVL(대상, 치환값) if(대상 == NULL)
return 치환값;
 
NVL2(대상, 치환값1, 치환값2) retrun 대상 == NULL ? 치환값2 : 치환값1;  
COALESCE
(대상1, 대상2, ..., 그외리턴)
for(대상타입 대상 : 대상들){
if(대상 != NULL)
save(대상);
}

if(save == NULL)
return 그외리턴;
else
save.allPrint();
* 그외리턴값 생략: NULL 리턴
ISNULL(대상, 치환값) if(대상 == NULL)
return 치환값;
 
NULLIF(대상1, 대상2) if(대상1.equals(대상2))
return NULL;
else
return 대상1;
 
CASE문 조건별 치환 및 연산 수행  

 

'SQL' 카테고리의 다른 글

[SQL] GROUP BY 절, HAVING 절  (0) 2025.02.14
[SQL] WHERE 절  (0) 2025.02.13
[SQL] DQL (Data Query Language)  (0) 2025.02.13
[SQL] SQL 명령어  (1) 2025.02.13
[SQL] Oracle 기본 계정과 사용자 계정, 권한 부여  (0) 2025.02.13