본문 바로가기

공부 자료/SQL

[12일차] 조작함수 사용하기 part2-2. 문자 함수

오늘은 지난 시간에 배웠던 문자함수를 활용해 보는 시간입니다! 오늘 학습에 앞서 지난주에 배웠던 문자 함수를 잠시 보고 넘어가 보겠습니다.

 

[문자 함수]

1. 대소문자 변환 함수

- UPPER(칼럼명) : 소문자를 대문자로 변환

- LOWER(칼럼명) : 대문자를 소문자로 변환

- INTCAP(칼럼명) : 첫 글자를 대문자로 변환 (띄어쓰기 사용 시 새로 인식)

2. 특정 문자 추출

- SUBSTR(칼럼명, 시작 자리수, 출력 문자 수) : 문자열에서 특정 자리 수의 문자를 추출

3. 문자열 길이 확인

- LENGTH(칼럼명) : 문자열 길이를 추출

4. 문자의 위치 확인

- INSTR(칼럼명, '찾을 문자열') : 문자열의 특정 철자의 첫번째 위치 확인

5. 문자열 변경하기

- REPLACE(칼럼명, '찾을 문자', '바꿀 문자') : 특정 문자열을 열에서 찾아 다른 문자로 변경

6. 문자열 지우기

- LRPAD(칼럼명, 자리수 지정, '채울 문자') : 특정 문자를 N개 만큼 앞쪽에서 채워서 출력

- RRPAD(칼럼명, 자리수 지정, '채울 문자') : 특정 문자를 N개만큼 뒤쪽에서 채워서 출력

 

앞 시간의 내용이 복습이 되었다면, 위의 문자 함수를 이용한 실습을 진행해 보도록 하겠습니다. 

 

1. 대소문자 함수들이 어떻게 쓰이는가?

// employees 테이블에서 first_name에서 첫글자가 대문자 E로 시작하는 결과 (소문자 e는 다른 결과 출력)
SELECT *
FROM employees
WHERE first_name LIKE '%E%';

>> 대소문자 구분없이 출력하고 싶을 경우에는?
SELECT *
FROM employees
WHERE upper(first_name) LIKE '%E%';


//employees 테이블에서 이름의 소문자 a의 위치가 1, 5, 6, 7번째인 사람들을 알고 싶다면?
SELECT first_name||' '||last_name as NAME, instr(first_name||' '||last_name, 'a') as 소문자a위치
FROM employees
WHERE instr(first_name||' '||last_name, 'a') in (1, 5, 6, 7);

>> 위의 내용에서 대문자도 소문자처럼 검색이 되는지 확인하고자 한다면?
SELECT first_name||' '||last_name as NAME
		, instr(first_name||' '||last_name, 'a') as 소문자a위치
        , lower(first_name||' '||last_name) 소문자이름
FROM employees
WHERE instr(lower(first_name||' '||last_name), 'a') in (1, 5, 6, 7);

 

2. 문자열을 자르는 함수는 어떻게 쓰이는가?

//employees 테이블에서 휴대폰 번호를 첫번째부터 3개, 다섯번째부터 3개, 아홉번째부터 3개 출력
SELECT phone_number
	, substr(phone_number, 1, 3) as coll
    , substr(phone_number, 5, 3) as coll
    , substr(phone_number, 9, 4) as coll
FROM employees
>> - 의 위치가 균등하기 않기 때문에 원하는대로 출력되지 않음

SELECT phone_number
	, substr(phone_number, 1, 3) as coll
    , substr(phone_number, 5, 3) as coll
    , substr(phone_number, 9, 4) as coll
    --------------------------------
    , substr(phone_number, 1, 3) as coll //앞의 세자리는 고정
    ,  substr(phone_number, 5, length(phone_number)) ph2 //앞 세자리 제외 출력
    , instr(substr(phone_number, 5, length(phone_number)), '.') 점의 위치 // 점의 위치 출력
    , substr(
    	substr(phone_number, 5, length(phone_number)), 1, 
        instr(substr(phone_number, 5, length(phone_number)), '.')-1) as 두번째 
    // 위 두가지를 사용하여 앞 세자리를 제외한 숫자들에서 점의 위치를 기준으로 문자를 잘라서 출력
     , substr(
     	substr(phone_number, 5, length(phone_number))
     	, instr(substr(phone_number, 5, length(phone_number)), '.')+1
     	, length(substr(phone_number, 5, length(phone_number)))
        ) as 세번째
FROM employees

>>최종 SQL문
SELECT phone_number
	, substr(phone_number, 1, 3) as 첫번쩨
    , substr(
    	substr(phone_number, 5, length(phone_number)), 1, 
        instr(substr(phone_number, 5, length(phone_number)), '.')-1) as 두번째 
     , substr(
     	substr(phone_number, 5, length(phone_number))
     	, instr(substr(phone_number, 5, length(phone_number)), '.')+1
     	, length(substr(phone_number, 5, length(phone_number)))) as 세번째
FROM employees

 

예제는 간단해 보였지만 SQL문은 굉장히 복잡하네요,,, 어떤 문자 함수가 있고, 어떻게 사용하는지 많은 예제를 통해서 접하는 것이 중요할 것 같습니다. 오늘 학습은 여기서 마치도록 하겠습니다!

 

12일차 - 출석 인증