[SQL / 기본문법] LENGTH / LENGTHB / INSTR / SUBSTR / PAD / TRIM 문자열 관련 함수

리트리버J

·

2020. 12. 29. 18:33

728x90

1. LENGTH

문자열 길이를 반환

SELECT
    LENGTH('오라클'),
    LENGTHB('오라클'),
    LENGTH('AAA'),
    LENGTHB('AAA') 
FROM
    DUAL;

2. LENGTHB

문자열의 바이트를 반환

오라클 바이트 규격

-- 영문자(1바이트), 공백(1바이트), 한글(3바이트)

3. INSTR

문자열의 위치를 알려준다.

0이 아닌 1부터 시작한다.

-- INSTR('문자열' | 컬럼명, '문자', 찾을 위치의 시작값, 빈도)
-- SELECT INSTR('HELLO WORLD', 'O')         STR1 -- 문자열의 왼쪽에서부터 찾기(기본사용)
--       ,INSTR('HELLO WROLD', 'O', -1)     STR2 -- 문자열의 오른쪽에서부터 찾기(-1 : 뒤에서부터)
--       ,INSTR('HELLO WORLD', 'O', -1, 1)  STR3 -- 문자열의 오른쪽에서부터 찾고, 첫번째 찾은 문자
--       ,INSTR('HELLO WORLD', 'O', -1, 2)  STR4 -- 문자열의 오른쪽에서부터 찾고, 두번째 찾은 문자
-- !! 항상 왼쪽에서부터 숫자를 센다..!! 단, 시작을 뒤부터 시작하냐 앞부터 시작하냐의 차이.
SELECT 
       INSTR('AABAAAAABA', 'B') 왼쪽에서부터,
       INSTR('AABAAAAABA', 'B', 1) 왼쪽에서부터,
       INSTR('AABAAAAABA', 'B', -1) 오른쪽에서부터,
       INSTR('AABAAAAABA', 'B', -1, 2) "오른쪽에서부터 2번째"
FROM DUAL;

쿼리문 결과

4.SUBSTR

substring의 약자

문자열의 잘라서 리턴한다.

SUBSTR('문자열'|컬럼명, 시작위치, 끝나는위치)

시작위치와 끝나는위치를 포함하여 자른다.

SELECT
    EMAIL,
    SUBSTR(EMAIL,1,INSTR(EMAIL, '@')-1) -- @이 포함되어 가져오므로 -1을 해주어 아이디만 가져온다.
FROM
    EMPLOYEE;

SQL 결과값

5. PAD

주어진 컬럼 문자열에 임의의 문자열을 덧붙여 길이 N의 문자열을 리턴

LPAD : 왼쪽을 원하는 문자로 채운다.

RPAD : 오른쪽을 원하는 문자로 채운다.

-- 칸을 20개 잡고 한 쪽을 #으로 채운다.
SELECT 
    LPAD(EMAIL,20,'#'), 
    RPAD(EMAIL,20,'#') 
FROM
    EMPLOYEE;

공백값을 넣을 시 한쪽으로 정렬한다.

SELECT 
    LPAD(EMAIL,20), 
    RPAD(EMAIL,20) 
FROM
    EMPLOYEE;

6. LTRIM / RTRIM

LTRIM('문자열','값') : 왼쪽에서 지정한 문자 / 문자열 제거한 나머지를 리턴

RTIRM('문자열','값') : 오른쪽에서 지정한 문자 / 문자열을 제거한 나머지를 리턴

값 미입력시 공백제거

SELECT LTRIM('123321ABC', '123') FROM DUAL;

123을 입력했지만, 321도 제거 된 것을 볼 수 있다.

123이 포함된 문자열이 있다면 그것 역시 제거한다.

SELECT RTRIM('ABC5782', '12345678') FROM DUAL;

12345678이지만 5782를 제거했다.

역시 포함된 문자열을 같이 제거한다.

* 오른쪽에서부터 제거하므로, 2 → 8 7 5가 꼭 포함되어야 있어야 한다.

만약, 578이라면 제거 하지 않는다. 

572라면 2만 제거한다.

그 옆의 8이 없으므로 같은 문자열이라 인식하지 않는 것이다.

7. TRIM

LTRIM / RTIM을 합쳤다.

양쪽에서 자른다!

SELECT TRIM('z' FROM 'zzzzABCzzzz') FROM DUAL;

SELECT TRIM(LEADING 'z' FROM 'zzzzABCzzzz') FROM DUAL; -- LEADING : 왼쪽 문자열을 잘라낸다
SELECT TRIM(TRAILING 'z' FROM 'zzzzABCzzzz') FROM DUAL; -- TRAILING : 오른쪽 문자열을 잘라낸다
SELECT TRIM(BOTH 'z' FROM 'zzzzABCzzzz') FROM DUAL; -- BOTH : 양쪽 문자열을 잘라낸다.
728x90