본문 바로가기
oracle/[SQL] SQL

2장. 단일행 함수

by #moonyz 2014. 9. 29.

단일행 함수



1. 문자 함수

 INITCAP(문자열 or 컬럼명)

 입력값의 첫 글자만 대문자로 변환

 EX) INITCAP('abcd') --> Abcd

 LOWER(문자열 or 컬럼명)

 입력값을 전부 소문자로 변환 

 EX) LOWER('ABCD') --> abcd

 UPPER(문자열 or 컬럼명)

 입력값을 전부 소문자로 변환

 EX) UPPER('abcd') --> ABCD 

 LENGTH(문자열 or 컬럼명)

 입력된 문자열의 길이 값을 출력 

 EX) LENGTH('한글') --> 2 

 LENGTHB(문자열 or 컬럼명)

 입력된 문자열의 길이의 바이트 값을 출력 

 EX) LENGTHB('한글') --> 4 

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

 두 문자열을 결합해서 출력, || 연산자와 동일 

 EX) CONCAT('A','B') -->AB 

 SUBSTR (문자열, 시작위치, 자릿수)

 주어진 문자에서 특정 문자만 추출

 ( =서브스트링, 서브스터, 서브스트)

 cf. SUBSTRING

 EX) SUBSTR('ABC',1,2) --> AB

 EX) SUBSTR('ABC', -1, 2) --> BC

 SUBSTRB (문자열, 시작위치, 자릿수)

 주어진 문자에서 특정  바이트만 추출

 EX) SUBSTRB('한글',1,2) --> 한

 INSTR (문자열, 찾는글자, 시작위치, 몇번째)

 주어진 문자에서 특정문자의 위치 추출

 EX) INSTR('ABCD','D') --> 4

 INSTRB

 주어진 문자에서 특정문자의 위치 바이트값 추출

 EX) INSTRB('한글로', '로') --> 5

 LPAD (문자열, 자리수, '채울문자')

 주어진 문자열에서 왼쪽으로 특정문자를 채움

 EX) LPAD('love', '6', '*') --> **love

 RPAD (문자열, 자리수, '채울문자')

 주어진 문자열에서 오른쪽으로 특정문자를 채움

 EX) RPAD('love', '6', '*') --> love**

 LTRIM (문자열, '제거할문자')

 주어진 문자열에서 왼쪽의 특정문자를 삭제함

 EX) LTRIM('*love', '*') --> love

 RTRIM (문자열, '제거할문자')

 주어진 문자열에서 오른쪽의 특정문자를 삭제함

 EX) RTRIM('love*', '*') --> love

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

 주어진 문자열에서 A를 B로 치환함

 EX) REPLACE('AB', 'A', 'E') --> EB

 REGEXP_REPLACE

 주어진 문자열에서 특정패턴을 찾아 치환함

 REGEXP_INSTR

 주어진 문자열에서 특정패턴의 시작 위치를 반환

 REGEXP_SUBSTR

 주어진 문자열에서 특정패턴을 찾아 반환함 

 REGEXP_LIKE

 주어진 문자열에서 특정패턴을 찾아 반환함 

 REGEXP_COUNT

 주어진 문자열에서 특정패턴의 횟수를 반환







2. 숫자 함수

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

주어진 숫자를 반올림 한 후 출력함 

 EX) ROUND(12.345, 2) --> 12.35 

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

주어진 숫자를 버림 한 후 출력함 

 EX) TR UNC(12.345, 2) --> 12.34 

 MOD(숫자, 나눌수)

주어진 숫자를 나누기 한 후 나머지 값 출력함 

 EX) MOD(12, 10) -->2 

 CEIL (숫자)

주어진 숫자와 가장 근접한 큰 정수 출력함

 EX) CEIL(12.345) -->13 

 FLOOR(숫자)

주어진 숫자와 가장 근접한 작은 정수 출력함 

 EX) FLOOR(12.345) -->12

 POWER(숫자1, 숫자2)

주어진 숫자1의 숫자2승을 출력함 

 EX) POWER(3,2) --> 9 


* ROWNUM : 줄번호 출력 EX) SELECT rownum "줄번호", name "이름" FROM emp;






3. 날짜 함수

 SYSDATE()

 시스템의 현재날짜와 시간 

 오라클이 설치된 서버의 시간은 함부로 바꾸면 안됨

 MONTHS_BETWEEN 

 두 날짜 사이의 개월 수 (숫자)

 큰 날짜를 먼저써야 양수로 나옴

 윤달 구분 불가능

 ADD_MONTHS

 주어진 날짜에 개월을 더함 

 NEXT_DAY

 주어진 날짜를 기준으로 돌아오는 날짜 출력 

 LAST_DAY 

 주어진 날짜가 속한 달의 마지막 날짜 출력 

 ROUND 

 주어진 날짜를 반올림 

 하루의 반에 해당되는 시간은 낮(정오) 12:00:00

 TRUNC 

 주어진 날짜를 버림 

 하루의 반에 해당되는 시간은 낮(정오) 12:00:00


* 날짜포맷 변경 : ALTER session SET NLS_DATE_FORMAT='YYYY-MM-DD:HH24:MI:SS';

 ALTER session SET NLS_DATE_FORMAT='YY/MM/DD';


* 리눅스 날짜 포맷 : DD-MON-YY

* 윈도우 날짜 포맷 : YYYY-MM-DD






4. 변환 함수 : 묵시적 데이터형 변환, 명시적 데이터 형 변환


 CHAR(n)

 고정 길이의 문자를 저장. 최대값은 2000bytes

 VARCHAR2(n)

 가변 길이의 문자를 저장. 최대값은 4000bytes 

 NUMBER(p,s)

 숫자값 저장. 

 p는 전체자리수, 1~38자리까지 가능 

 s는 소수점 이하 자리수, -84~127자리까지 가능

 EX) NUMBER (5, 2) --> 123.45

 DATE

 BC 4712년 1월 1일 ~ AD 9999년 12월 31일 

 날짜 저장. 총 7byte로 저장

 LONG

 가변 길이의 문자를 저장, 최대 2GB까지 저장가능

 CLOB

 가변 길이의 문자를 저장, 최대 4GB까지 저장가능

 BLOB

 가변 길이의 바이너리 데이터를 최대 4GB까지 저장가능

 RAW(n)

 원시 이진 데이터. 최대 2000bytes 까지 저장 

 LONG RAW(n)

 원시 이진 데이터. 최대 2GB까지 저장가능 

 BFILE

 외부 파일에 저장된 데이터로 최대 4GB까지 저장가능 


* 묵시적 형 변환 (자동) : 오라클이 자동으로 형 변환을 시킨다.

EX) SELECT 2 + '2' 

 FROM dual;

--> 결과 4

-- 2는 숫자, '2'는 문자

-- 산술연산자는 문자를 연산할수 없기에 오라클이 자동으로 문자를 숫자로 바꾼후 연산수행


* 명시적 형 변환 (수동) : 사용자가 수동으로 형 변환을 시킨다.

EX) SELECT 2 + TO_NUMBER('2')

 FROM dual;

-- 속도가 느려지는 주점이 될 수 있음.



* 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'

 


 TO_CHAR (숫자, '원하는포맷') : 숫자형 -> 문자형 변환하기

 9

 9의 개수만큼 자리수

 EX) to_char(1234, '99999')

 0

 빈자리를 0으로 채움

 EX) to_char(1234, '09999')

 $

 $ 표시를 붙여서 표시

 EX) to_char(1234, '99999')

 .

 소수점 이하를 표시

 EX) to_char(1234, '99999')

 ,

 천 단위 구분기호 표시

 EX) to_char(1234, '99999')


* TO_NUMBER('문자') : 문자(숫자처럼 생긴 문자)를 숫자로 바꾸는 함수


* TO_DATE('문자') : 문자(날짜처럼 생긴 문자)를 날짜로 바꾸는 함수





5. 일반 함수

① NVL(컬럼, null일 때 치환할값)

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

- 치환값이 문자일 경우 : EX) NVL(position, '사원') : position 값이 null일 경우 '사원'으로 치환

- 치환값이 날짜일 경우 : EX) NVL(hiredtae, '2014.05.01') : hiredate 값이 없을 경우 '2014/05/01'로 치환




② NVL2(COL1, COL2, COL3)

- COL1 값이 null이 아니면 COL2를 null이면 COL3을 출력



③ DECODE(A, B, '1', null)

- 마지막 null은 생략 가능

- A가 B이면 1을 출력하고 아니면 null을 출력

DECODE(A, B, '1', '2') : null값이 아닌 다른 값으로 대체 가능

- DECODE(A, B, '1', C, '2', '3') : A가 B일 경우 1 출력, A가 C일 경우 2 출력, 둘다아니면 3 출력

DECODE(A, B, DECODE( C, D, '1', null) ) : A가 B일 경우 C가 D를 만족하면 1출력, C가 D가 아닐경우 NULL

- DECODE(A, B, DECODE( C, D, '1', '2' ) ) null값이 아닌 다른 값으로 대체 가능

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





④ CASE 문

- 크거나 작은 조건을 처리할 경우 (decode는 '=' 인 값을 처리하는데 사용됨)


'oracle > [SQL] SQL' 카테고리의 다른 글

6장. DDL  (0) 2014.10.02
5장. JOIN  (0) 2014.10.02
4장. 복수행 함수 (그룹함수)  (0) 2014.10.01
3장. 정규식함수  (0) 2014.09.30
1장. SELECT  (0) 2014.09.29

댓글