본문 바로가기
Study/SQL

3.문자열 함수

by 로롤로롱 2023. 4. 25.

/*
<함수>
컬럼의 값을 읽어서 계산결과를 반환
- 단일행 함수 : 조회된 개수만큼 반환
- 그룹 함수 : 여러행을 읽어서 하나의 값으로 반환
*/

/*
단일행 함수
<문자관련 함수>
 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' 카테고리의 다른 글

6.형변환함수  (0) 2023.04.28
5.날짜함수  (0) 2023.04.27
4.숫자 함수  (0) 2023.04.26
2.SELECT  (0) 2023.04.24
1. 삽입, 삭제  (0) 2023.04.23

댓글