Oracle/개념

2장. SQL 단일행 함수

2024. 6. 11. 17:11
728x90

함수의 종류

  • 단일행 함수 : 데이터베이스에서 연산되는 단위가 각각의 행 단위로 실행된다.
  • 복수행 함수 : 행이 입력되는 매개변수가 여러 개의 행에 있는 데이터를 받아서 실행된다.

 

단일행 함수의 종류

  • 문자 함수
  • 숫자 함수
  • 날짜 함수
  • 변환 함수: 묵시적 데이터형 변환 명시적 데이터형 변환
  • 일반 함수

 

 

 


1. 문자 함수

함수명 의미 사용예
INITCAP 입력 값의 첫 글자만 대문자로 변환 INITCAP('abcd') → Abcd
LOWER 입력 값을 전부 소문자로 변환 LOWER('ABCD') → abcd
UPPER 입력값을 전부 대문자로 변환 UPPER('abcd') → ABCD
LENGTH 입력된 문자열의 길이 값을 출력 LENGTH('한글') → 2
LENGTHB 입력된 문자열의 길이의 바이트 값을 출력 LENGTHB('한글') → 4
CONCAT 두 문자열을 결합해서 출력. || 연산자와 동일 CONCAT('A', 'B') → AB
SUBSTR 주어진 문자에서 특정 문자만 추출 SUBSTR('ABC', 1, 2) → AB
SUBSTRB 주어진 문자에서 특정 바이트만 추출 SUBSTRB('한글', 1, 2) → 한
INSTR 주어진 문자에서 특정문자의 위치 추출 INSTR('A*B#', '#') → 4
INSTRB 주어진 문자에서 특정문자의 위치 바이트값 추출 INSTRB('한글로', '로') → 5
LPAD 주어진 문자열에서 왼쪽으로 특정 문자를 채움 LPAD('love', 6, '*') → **love
RPAD 주어진 문자열에서 오른쪽으로 특정 문자를 채움 RPAD('love', 6, '*') → love**
LTRIM 주어진 문자열에서 왼쪽의 특정 문자를 삭제함 LTRIM('*love', '*') → love
RTRIM 주어진 문자열에서 오른쪽의 특정 문자를 삭제함 RTRIM('love*', '*') → love
REPLACE 주어진 문자열에서 A를 B로 치환함 REPLACE('AB', 'A', E') → EB
REGEXP_REPLACE 주어진 문자열에서 특정패턴을 찾아 치환함 아래 예 참조
REGEXP_INSTR 주어진 문자열에서 특정패턴의 시작 위치를 반환 아래 예 참조
REGEXP_SUBSTR 주어진 문자열에서 특정패턴을 찾아 반환함 아래 예 참조
REGEXP_LIKE 주어진 문자열에서 특정패턴을 찾아 반환함 아래 예 참조
REGEXP_COUNT 주어진 문자열에서 특정패턴의 횟수를 반환 아래 예 참조

 

 

1) INITCAP() 함수

Initial : 처음 / Capital : 대문자

중간에 공백이 있을 경우 단어를 분리해서 각 단어의 첫 번째 문자를 대문자로 바꿔준다.

INITCAP(문자열-또는-컬럼명);

 

 

2) LOWER() / UPPER() 함수

lowercase : 소문자 / uppercase : 대문자

모두 소문자(LOWER) 혹은 대문자(UPPER)로 변환

LOWER(문자열-또는-컬럼명)
UPPER(문자열-또는-컬럼명)

 

 

3) LENGTH() / LENGTHB() 함수

LENGTH : 논리적으로 길이를 세는 것.

LENGTHB : Byte로 길이를 세는 것. 영어일 경우 1byte, 한글일 경우 2byte 사용.

LENGTH(컬럼-또는-문자열)
LENGTHB(컬럼-또는-문자열)

 

 

4) CONCAT() 함수

연결 연산자를 사용하는 것이 더 편하다.

CONCAT('문자열1', '문자열2')

 

 

5) SUBSTR() / SUBSTRB() 함수

SUB : 일부, STR : 문자열을 떼어 온다. / B : Byte

SUBSTR('문자열'-또는-컬럼명, 숫자1, 숫자2)
SUBSTRB('문자열'-또는-컬럼명, 숫자1, 숫자2)

 

 

6) INSTR() 함수

특정 문자열에 내가 원하는 문자열이 있는지 찾는다.

INSTR('문자열'-또는-컬럼, 찾는 글자, 시작위치, 몇번째인지(기본값은-1))

 

 

7) LPAD() / RPAD() 함수

L : LEFT, R : RIGHT / PAD : 덧댄다, 채워 넣는다.

LPAD('문자열'-또는-컬럼명, 자리수, '채울-문자')
RPAD('문자열'-또는-컬럼명, 자리수, '채울-문자')

 

 

8) LTRIM() / RTRIM() 함수

왼쪽(LTRIM) 혹은 오른쪽(RTRIM)에 불필요한 것을 제거한다.

LTRIM('문자열'-또는-컬럼명, '제거할-문자')
RTRIM('문자열'-또는-컬럼명, '제거할-문자')

 

 

9) REPLACE() 함수

바꿔치기하는 함수. 굉장히 많이 사용한다.

REPLACE('문자열'-또는-컬럼명, '문자1', '문자2')

 

 

 


 

 

 

2. 숫자 관련 함수

이름 의미 사용 예
ROUND 주어진 숫자를 반올림한 후 출력함 ROUND(12.345, 2) → 12.35
TRUNC 주어진 숫자를 버림한 후 출력함 TRUNC(12.345, 2) → 12.34
MOD 주어진 숫자를 나누기한 후 나머지 값 출력함 MOD(12, 10) → 2
CEIL 주어진 숫자와 가장 근접한 큰 정수 출력함 CEIL(12.345) → 13
FLOOR 주어진 숫자와 가장 근접한 작은 정수 출력함 FLOOR(12.345) → 12
POWER 주어진 숫자1의 숫자2 승을 출력함 POWER(3, 2) → 9

 

 

1) ROUND() 함수

반올림. 자리수를 잘 보기. 숫자 관련 함수는 자리 수 하나 차이가 엄청난 차이를 낼 수 있기 때문에 특히 주의해야 한다.

ROUND(숫자, 출력을-원하는-자리수)

 

 

2) TRUNC() 함수

ROUND 함수와 사용법은 동일. 잘라냄, 버림.

TRUNC(숫자, 원하는-자리수)

 

 

3) MOD() 함수 / CEIL() 함수 / FRLOOR() 함수

MOD() 함수 : 나머지 값. 나머지 값을 구하는 함수

CEIL() 함수 : 천장 값. 주어진 숫자에서 가장 가까운 큰 정수를 구하는 함수

FLOOR() 함수 : 바닥 값. 주어진 함수와 가장 가까운 작은 정수를 구하는 함수

# 숫자1을 숫자2로 나누었을 때 값
MOD(숫자1, 숫자2)

# 숫자3의 가장 가까운 큰 정수
CEIL(숫자3)

# 숫자4의 가장 가까운 작은 정수
FLOOR(숫자4)

 

 

4) POWER() 함수

숫자1의 숫자2의 승수를 구해준다.

POWER(숫자1, 숫자2)

 

 

 


 

 

 

3. 날짜 관련 함수들

함수명 의미 결과
SYSDATE 시스템의 현재 날짜와 시간 날짜
MONTHS_BETWEEN 두 날짜 사이의 개월 수 숫자
ADD_MONTHS 주어진 날짜에 개월을 더함 날짜
NEXT_DAY 주어진 날짜를 기준으로 돌아오는 날짜 출력 날짜
LAST_DAY 주어진 날짜가 속한 달의 마지막 날짜 출력 날짜
ROUND 주어진 날짜를 반올림 날짜
TRUNC 주어진 날짜를 버림 날짜

 

 

1) SYSDATE 함수

서버의 시간 변경 조심하기

SELECT SYSDATE
FROM 테이블;

 

 

2) MONTHS_BETWEEN 함수

몇 개월 차이가 나는지 본다.

MONTHS_BETWEEN('날짜1', '날짜2')
MONTHS_BETWEEN('연/월/일', '연/월/일')

 

(1) 두 날짜 중 큰 날짜를 먼저 써야 양수가 나온다.

(2) 두 날짜가 같은 달에 속해 있으면 특정 규칙으로 계산된 값이 나온다

     (같은 1개월이라도 29일, 30일, 31일일 경우마다 모두 결과값이 다르다)

 

 

3) ADD_MONTHS() 함수

괄호 안에 추가될 월 수를 넣으면 계산된 값이 나온다. 컬럼값에 있는 날짜를 '번호'개월만큼 올린다.

ADD_MONTHS(컬럼값, 번호)
ADD_MONTHS('연/월/일', 문자-또는-숫자)
ADD_MONTHS(SYSDATE, 문자-또는-숫자)

 

 

4) NEXT_DAY() 함수

지정한 날짜(컬럼값)에서 얼마나 지나서 원하는 날짜(문자열)가 나오는지 출력

NEXT_DAY(컬럼값, 문자열)
NEXT_DAY(SYSDATE, 문자)

 

 

5) LAST_DAY() 함수

날짜를 기준으로 월말이 며칠인지 출력

LAST_DAY('연/월/일')
LAST_DAY(SYSDATE)

 

 

6) 날짜의 ROUND(), TRUNC() 함수

ROUND : 반올림 / TRUNC() : 버림

ROUND(SYSDATE)
TRUNC(SYSDATE)

 

 

 


 

 

 

4. 형 변환 함수(11g 기준)

문자열을 데이터나 숫자로 바꾸는 것

데이터 타입 설명
CHAR(n) 고정 길이의 문자를 저장합니다. 최대값은 2000bytes입니다.
VAR CHAR2(n) 변하는 길이의 문자를 저장합니다. 최대값은 4000bytes입니다.
NUMBER(p, s) 숫자값을 저장합니다. p는 전체 자리수로 1 ~ 38자리까지 가능하고 s는 소수점 이햐 자리수로 -84 ~ 127자리까지 가능합니다.
DATE 총 7Byte로 BC 4712년 1월 1일부터 AD 9999년 12월 31일까지의 날짜를 저장할 수 있습니다.
LONG 가변 길이의 문자를 저장하며 최대 2GB까지 저장할 수 있습니다
CLOB 가변 길이의 문자를 저장하며 최대 4GB까지 저장할 수 있습니다
BLOB 가변 길이의 바이너리 데이터를 최대 4GB까지 저장할 수 있습니다
RAW(n) 원시 이진 데이터로 최대 2000bytes까지 저장할 수 있습니다
LONG RAW(n) 원시 이진 데이터로 최대 2GB까지 저장할 수 있습니다
BFILE 외부 파일에 저장된 데이터로 최대 4GB까지 저장할 수 있습니다

 

 

1) 묵시적(자동) 형 변환과 명시적(수동) 형 변환

  • 묵시적 형 변환 : 자동으로 컴퓨터가 알아서 해주는 것
  • 명시적 형 변환 : 사람이 수동으로 맞춰주는 것

 

숫자처럼 생긴 문자만 변환이 가능하다.

SELECT 숫자 + '숫자'
FROM 테이블;

SELECT 숫자 + TO_NUMBER('숫자')
FROM 테이블;

 

 

명시적 형 변환

 

 

2) TO_CHAR 함수

TO_CHAR(원래-날짜, '원하는-모양')
  • 'YYYY' : 연도를 4자리로 표현한다.  ex) 2014
  • 'RRRR' : 2000년 이후에 Y2K 버그로 인해 등장한 날짜 표기법. 연도 4자리 표기법
  • 'YY' : 연도를 끝의 2자리만 표시한다.  ex) 14
  • 'RR' : 연도를 마지막 2자리만 표시한다.  ex) 14
  • 'YEAR' : 연도의 영문 이름 전체를 표시한다.

[ 월 ]

  • MM : 월을 숫자 2자리로 표현한다.  ex) 10
  • MON : 유닉스용 오라클에서 월을 뜻하는 영어 3글자로 표시한다.  ex) OCT
    윈도우용 오라클일 경우 MONTH와 동일하다.
  • MONTH : 월을 뜻하는 이름 전체를 표시한다.

[ 일 ]

  • DD : 일을 숫자 2자리로 표시한다.  ex) 26
  • DAY : 요일에 해당하는 명칭을 표시하는데 유닉스용 오라클에서는 영문으로, 윈도우용 오라클에서는 한글로 나온다.
  • DDTH : 몇 번째 날인지를 표시한다.

[ 시간 ]

  • HH24 : 하루를 24시간으로 표시한다.
  • HH : 하루를 12시간으로 표시한다.
  • 분 : MI로 표시한다.
  • 초 : SS로 표시한다.

 

 

3) TO_CHAR 함수 (숫자형 → 문자형으로 변환하기)

종류 의미 사용 예 결과
9 9의 개수만큼 자리수 TO_CHAR(1234, '99999') 1234
0 빈자리를 0으로 채움 TO_CHAR(1234, '099999') 001234
$ $ 표시를 붙여서 표시 TO_CHAR(1234, '$9999') $1234
. 소수점 이하를 표시 TO_CHAR(1234, '9999.99') 1234.00
, 천 단위 구분 기호를 표시 TO_CHAR(12345, '99,999') 12,345

 

 

4) TO_NUMBER() 함수

숫자가 아닌, 숫자처럼 생긴 문자를 숫자로 바꾸어 주는 함수.

TO_NUMBER('숫자처럼-생긴-문자')

# ex
SELECT TO_NUMBER('5') FROM emp;

 

 

5) TO_DATE() 함수

문자열을 넣으면 데이터로 바꾸어 준다.

TO_DATE('문자')

 

 

 


 

 

 

5. 일반 함수

 

1) NVL() 함수

NULL 값을 만나면 다른 값으로 치환해서 출력하는 함수

NVL(컬럼, 치환할-값)

 

* 치환할 값이 숫자일 경우

# 컬럼의 값이 null일 경우 null 대신 0으로 치환하라
NVL(컬럼, 0)

# 컬럼의 값이 null일 경우 null 대신 100으로 치환하라
NVL(컬럼, 100)

 

* 치환 값이 숫자일 경우

# 컬럼의 값이 null일 경우 '문자'로 치환하라
NVL(컬럼, '문자')

 

* 치환 값이 날짜일 경우

# 컬럼의 값이 null일 경우 '연/월/일'로 치환하라
NVL(컬럼, '연/월/일')

 

 

2) NVL2() 함수

NVL2(컬럼1, 컬럼2, 컬럼3)

 

 

3) DECODE() 함수

 일반 개발 언어 등에서 사용 중인 분기문인 if 문을 오라클 안으로 가져오는 함수이다. if 문의 역할을 해준다. 오라클에서만 사용되는 함수이다. if 문을 사용해야 하는 조건 문을 처리할 수 있다.

 

유형 1. A가 B일 경우 '1' 출력

DECODE(A, B, '1', null) # null은 생략 가능

 

유형 2. A가 B일 경우 '1' 출력,

아닐 경우 '2' 출력

DECODE(A, B, '1', '2')

 

유형 3. A가 B일 경우 '1'을 출력, A가 C일 경우 '2'를 출력,

둘 다 아닐 경우 '3' 출력

DECODE(A, B, '1', C, '2', '3')

 

유형 4.

A가 B일 경우 중 C가 D를 만족하면 '1' 출력,

C가 아닐 경우 NULL 출력

(DECODE 함수 안에 DECODE 함수가 중첩되는 경우)

DECODE(A, B, DECODE(C, D, '1', null)) # null 생략 가능

 

유형 5.

A가 B일 경우 중에서 C가 D를 만족하면 '1' 출력,

C가 D가 아닐 경우 '2' 출력

DECODE(A, B, DECODE(C, D, '1', '2'))

 

유형 6

A가 B일 경우 중에서 C가 D를 만족하면 '1' 출력,

C가 D가 아닐 경우 '2' 출력,

A가 B가 아닐 경우 '3' 출력

DECODE(A, B, DECODE(C, D, '1', '2'), '3')

 

 

4) CASE 문

CASE 조건 WHERE 결과1 THEN 출력1
	  [WHEN 결과2 THEN 출력2]
	  ELSE 출력3
END "컬럼명"

 

 

 


 

 

 

6. 정규식(Regular Expression) 함수로 다양한 조건 조회하기

10g부터 추가되었다. 특정 패턴을 찾는 것.

사용 기호 의미 사용 예
^ (캐럿) 해당 문자로 시작하는 line 출력 '^pattern'
$ (달러) 해당 문자로 끝나는 line 출력 'pattern$'
. S로 시작하여 E로 끝나는 line ( . → 1 character ) 'S....E'
* '모든'이라는 뜻. 글자 수가 0일 수도 있음. '[a-z]*'
[ ] 해당 문자에 해당하는 한 문자 '[Pp]attern'
[ ^ ] 해당 문자에 해당하지 않는 한 문자 '[^a-m]attern'

 

 

1) REGEXP_LIKE 함수

REGEXP_LIKE(text, '[첫문자-끝문자]')

# 공백이 있는 모든 행 출력
REGEXP_LIKE(text, '[[:space:]]')

 

 

2) REGEXP_REPLACE 함수

REGEXP_REPLACE (source_char, pattern
	    [, replace_string
            [, position
            [, occurence
            [, match_param]]]]
            )

 

 

3) REGEXP_SUBSTR 함수

REGEXP_SUBSTR('문자열1* *문자열2 $문자열3%문자열4', '[^ ]+[문자열]')

 

 

 


 

 

 

7. 11g에 추가된 정규식 함수

 

1) REGEXP_COUNT 함수

특정 문자의 개수를 세는 함수

REGEXP_COUNT(text, '문자')

'Oracle > 개념' 카테고리의 다른 글

6장. DML 데이터 관리  (0) 2024.06.13
5장. DDL 명령과 딕셔너리  (0) 2024.06.12
4장. JOIN  (3) 2024.06.12
3장. SQL 복수행 함수  (0) 2024.06.12
1장. SELECT 검색  (1) 2024.06.06