본문 바로가기

프로그래밍/오라클

[ORACLE] 오라클 SQL 문자형 함수

[ORACLE] 오라클 SQL 문자형 함수





문자형 함수
함수의 종류
 
단일행 함수
 번에  건씩 처리하는 함수
복수행 함수
그룹 함수 혹은 집계 함수
 
 
단일행 함수
1) 문자 함수
2) 숫자 함수
3) 날짜 함수
4) 변환 함수 (묵시적 데이터 변환명시적 데이터 변환)
5) 일반 함수



문자형 함수의 종류와 사용법






그럼 문자형 함수를 실제로 사용해보자!
문자형 함수 연습






1.  trim

select length(trim('   아메리카노')) from dual;



2.  ||

select 'a' || 'bcde' from dual;


3. concat : CONCAT( 컬럼, 컬럼) 

   => 두 개의 문자열을 결합

select concat('my name is' , ' inchul') from dual;



4. CHR >> 아스키코드값 얻기(숫자) 

   ASCII >> CHR값 얻기(문자) 

   >> 각 제일 앞에 있는 한 글자에서만 값을 가져온다.

select CHR(13) "CHR", ASCII('') "ASCII" from dual;

--연습해보기
select CHR(ASCII(coffee_name))
from  ic_coffee
order by 1;




5. LOWER : 해당 문자나 문자열을 소문자로 

   UPPER : 대문자로 반환 

   INITCAP : 첫 글자를 대문자로, 카멜케이스형태이다.

SELECT  LOWER('DATA minipulation Language') "LOWER",
        UPPER('DATA minipulation Language') "UPPER",
        INITCAP('DATA minipulation Language')  "INITCAP"
FROM    DUAl;



6. LPAD & RPAD : 지정된 길이 n에서 c1을 채우고 남은 공간을 c2로 채워서 반환 

   SELECT LPAD ('c1', length, ['c2']) 

   => c2 공간을 채우지 않아도 괜찮다. 

   보이지 않을 뿐 공백으로 매워진다. 

   길이를 재보면 알 수 있다.

SELECT  length(LPAD  ('Java', 10)) "LPAD_1_length",
        LPAD  ('Java', 10) "LPAD_1",
        LPAD  ('Java', 10, '*') "LPAD",        
        RPAD  ('Java', 12, '>')
FROM    DUAL;



7. LTRIM : LTRIM( 컬럼, [기본값:공백] || [문자열]) 

   RTRIM : TRIM( 컬럼, [기본값:공백] || [문자열]) 

   => 좌우측의 공백문자 혹은 지정된 문자열과 일치하는 문자 제거

SELECT  '<' ||  LTRIM ('    AAA    ') || '>' AS "LTRIM1",
        '<' ||  LTRIM ('HELLO WORLD HE', 'HE') || '>'  AS  "LTRIM2"
FROM    DUAL;


8. SUBSTR : SUBSTR( 컬럼 , 자리위치 , 글자수)

--      문자열_연습문제 1. 'SQL PROJECT'에서 'SQL' 만 추출해내시오.
SELECT  SUBSTR('SQL PROJECT' , 1, 3) "이거뽑아라"
FROM    DUAL;

--    문자열_연습문제 2. 회원테이블에서 회원의 이름에서 성씨 만 추출해내시오.
SELECT  SUBSTR(MEM_NAME, 1, 1)
FROM    IC_MEMBER;

--    문자열_연습문제 3. 회원테이블에서 회원의 이름에서 성씨가 김씨인 사람만 추출해내시오.
SELECT  MEM_NAME
FROM    IC_MEMBER
WHERE   SUBSTR(MEM_NAME,1,1) = '김' ;

SELECT  MEM_NA
FROM    IC_MEMBER
WHERE   MEM_NAME LIKE '김%';



9. TRANSLATE : TRANSLATE(컬럼, 지정 문자 , 치환할 문자) 

   문자열_연습문제 4. 회원테이블의 회원아이디에서 숫자를 제거하여 출력하시오.

SELECT  MEM_NAME, MEM_ID , TRANSLATE(MEM_ID, 'abcdefghijklmnopqrstuvwxyz'||MEM_ID, 'abcdefghijklmnopqrstuvwxyz'), LENGTH(TRANSLATE(MEM_ID, '0123456789', ' '))
FROM    IC_MEMBER;

--      공백까지 완벽제거
SELECT REPLACE(TRANSLATE('012a123', '0123456789', ' '), ' ','')
FROM dual;



10. REPLACE : REPLACE( 컬럼 , 치환될 문자(열) , 치환할 문자(열)) 

     문자열_연습문제 5. 회원테이블의 회원성명 중 '이' -> '리' 로 치환검색

SELECT  mem_name, REPLACE(mem_name, '이', '리')
FROM    IC_MEMBER
WHERE   mem_name LIKE '이%';


11. INSTR : INSTR( 컬럼 , 지정문자 , 시작자릿수) 

     => 처음 나타나느 위치를 리턴 
     INSTR( 컬럼 , 지정문자 , 시작자릿수, n번째수) 
     => 찾은 문자에서 n번째 해당하는 친구의 자릿 수 리턴 
     없으면 0 을 리턴한다. 

문자열_연습문제 6. 회원테이블의 메일에서 '@' 가 시작되는 위치를 알아내시오.

SELECT  INSTR(MEM_MAIL, '@', 5)
FROM    IC_MEMBER;

SELECT  INSTR('와우왕우우우우앙', '우', 3, 1)
FROM  DUAL;


12. LENGTH : LENGTH(컬럼) 

     => 문자열의 길이를 리턴 
     LENGTHB : LENGTHB(컬럼) 

     => 크기를 리턴 -- 한글은 3바이트다!

SELECT  LENGTH('SQL 프로젝트') "길이", LENGTHB('SQL 프로젝트') "크기"
FROM    DUAL;