/*
<함수>
컬럼의 값을 읽어서 계산결과를 반환
- 단일행 함수 : 조회된 개수만큼 반환
- 그룹 함수 : 여러행을 읽어서 하나의 값으로 반환
*/
/*
단일행 함수
<문자관련 함수>
1)LENGTH/LENGTHB
- LENGTH(값) : 글자수를 반환
- LENGTHB(값) : 글자의 바이트 수를 반환
한글 3 BYTES 영어, 숫자, 특수문자 1BYTE
(값 : 컬럼, 문자열)
DUAL 테이블 : 함수 테스트용으로 자주 사용되는 테이블
- SYS사용자가 소유하는 테이블로 모든 사용자가 접근이 가능한 테이블
- 한개의 행과 한개의 컬럼을 가지고 있는 더미(dummy)테이블
함수의 결과를 조회하기 위해 임시로 사용하는 테이블
2)INSTR
- INSTR(값, 문자[,시작위치][,위치])
- 지정한 위치부터 지정된 숫자번째로 나타나는 문자의 시작위치를 반환
- SELECT INSTR('AABAACAABBAA', 'B', 시작위치(-는 뒤에서부터), N번째) FROM DUAL;
3)LPAD/RPAD
- LPAD/RPAD(값, 길이[,'덧붙이려고 하는 문자'])
- 제시된 값에 임의의 문자를 왼쪽 또는 오른쪽에 붙여 최종 N길이 만큼 문자열을 반환
- 문자열을 통일감있게 표시하고자 할 때 사용
- 문자열이 길이보다 길면 지정길이만큼 보여줌
- 문자열이 길이보다 짧으면 남은 공간을 지정한 문자열을 반복해서 입력
4)LTRIM/RTRIM
- LTRIM/RTRIM(값[, '제거하고 싶은 문자'])
- 문자열의 왼쪽 혹은 오른쪽에 제거하고자 하는 문자들을 찾아서 제거 후 결과를 반환
- 양쪽 제거 LTRIM(RTRIM(' KKK ')) <- 함수 두번 사용 or TRIM 사용
5)TRIM
- TRIM([LENADING|TRALING|BOTH] '제거하려는 문자값' FROM 값(컬럼|리터럴))
(SELECT TRIM(BOTH '0' FROM '0001111000') FROM DUAL;)
(SELECT TRIM('0001111000') FROM DUAL; <-공백제거)
- 문자값 앞LENADING/뒤TRALING/양쪽BOTH에 있는 지정 문자를 제한 나머지를 반환
- 제거하고자 하는 문자값을 생략시 양쪽 공백을 제거
- 값이 없으면 0 반환
6)SUBSTR
- SUBSTR(컬럼|'문자열', POSITION[, LENGTH])
- 문자열데이터에서 지정한 위치부터 지정한 개수만큼 문자열을 추출 후 반환
- POSITION : 시작위치, 기본 값 1
- POSITION > 0 왼쪽에서 오른쪽으로 찾음
- POSITION < 0 오른쪽에서 왼쪽으로 찾음
ex) SELECT SUBSTR('안녕하세요',-3,2) FROM DUAL; <-뒤에서 세번째자리부터 두자리 추출
7)LOWER/UPPER/INITCAP
LOWER|UPPER|INITCAP(컬럼|'문자값')
- LOWER : 모두 소문자로 변경
- UPPER : 모두 대문자로 변경
- INITCAP : 단어 앞 글자마다 대문자로 변경
8)CONCAT
CONCAT(칼럼|'문자열',칼럼|'문자열')<- ||과 같음
- 문자데이터 두개를 전달 받아서 하나로 합친 후 결과를 반환
- 인수가 두개만 가능, 2개를 넘어가면 오류 발생
- 연결해서 쓸 수 있음
CONCAT(CONCAT('가나다','라'),'마')
9)REPLACE
REPLACE(컬럼|'문자값', 변경하려는 문자, 변경하고 하는 문자)
- 컬럼, 문자값에서 변경하고자 하는 문자를 변경하려는 문자로 변경하여 반환
*/
SELECT *
FROM DUAL;
SELECT LENGTH('오라클'), LENGTHB('오라클') FROM DUAL;
--사용하는 문자코드에 따라 한글이 몇바이트 인식되는지 달라질수있음
-- 현재 사용하는 문자코드를 조회
SELECT * FROM nls_database_parameters
WHERE PARAMETER ='NLS_CHARACTERSET';
SELECT emp_name, LENGTH(emp_name),LENGTHB(emp_name)
FROM emp;
SELECT INSTR('AABAACAABBAA', 'B') FROM DUAL; --B의 위치값을 반환
SELECT INSTR('AABAACAABBAA', 'D', 1, 2) FROM DUAL; --B의 위치값을 반환
--SELECT INSTR('AABAACAABBAA', 'B', 시작위치(-는 뒤에서부터), N번째) FROM DUAL;
SELECT department_id, INSTR('10|20|30', department_id)
FROM dept
WHERE INSTR('10|20|30', department_id)>0;
-- 20만큼의 길이중 email값은 오른쪽으로 정렬하고 공백을 왼쪽으로 채움
SELECT LPAD(email, 20)
FROM emp;
SELECT LPAD(email, 20, '*')
FROM emp;
SELECT LTRIM(' KKK') FROM DUAL;
SELECT LTRIM(emp_name, 'A')
FROM emp;
SELECT TRIM(' 1111 ') FROM DUAL;
SELECT LTRIM(emp_name, 'A') FROM emp;
SELECT SUBSTR('SHOWMETHMONEY',-1,5)
FROM DUAL;
SELECT emp_name, SUBSTR(emp_name,0,INSTR(emp_name, ' ')-1)
FROM emp;
UPDATE emp
SET email = email||'@JUNGANG.COM';
SELECT *
FROM emp;
SELECT email, SUBSTR(email,1,INSTR(email, '@')-1)
FROM emp;
SELECT SUBSTR('1111221223531',7,1)
FROM DUAL;
SELECT RPAD(SUBSTR('1111292223531',1,7),13,'*')
FROM DUAL;
SELECT emp_name, LOWER(emp_name), UPPER(emp_name), INITCAP(emp_name)
FROM emp;
SELECT CONCAT(CONCAT('가나다','라'),'마')
FROM DUAL;
SELECT CONCAT(employee_id,department_id)
FROM emp;
SELECT REPLACE('서울시 역삼동 강남구 역삼동', '역삼동', '삼성동')
FROM DUAL;
SELECT email, REPLACE(email, '@JUNGANG.COM', '')
FROM emp;
UPDATE emp
SET email=REPLACE(email, '@JUNGANG.COM', '');
SELECT email
FROM emp;
SELECT SUBSTRB('오라클',2,3)
FROM DUAL;
SELECT SUBSTR('안녕하세요',-3,2)
FROM DUAL;
commit;
Study/SQL
댓글