[SQL / 기본문법] LENGTH / LENGTHB / INSTR / SUBSTR / PAD / TRIM 문자열 관련 함수
리트리버J
·2020. 12. 29. 18:33
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;
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 : 양쪽 문자열을 잘라낸다.
'SQL > Oracle' 카테고리의 다른 글
[SQL] Oracle 게시판 이전글 다음글 쿼리문 (0) | 2021.01.14 |
---|---|
[SQL] INDEX 의미 / 생성 / 수정 / 삭제 / 조회 (0) | 2020.12.31 |
[SQL / 기본문법] SUM / AVG / MIN / MAX / COUNT 숫자 관련 함수 (0) | 2020.12.29 |
[SQL / 기본문법] BETWEEN AND / LIKE (%, _) / IN / 연산자 우선순위 (0) | 2020.12.28 |
[SQL / 기본문법] NVL / IS NULL / DISTINCT / AS / || / !=, ^=, <> (0) | 2020.12.28 |