문자열 함수, String Function
1. 대소문자 변환
- upper(), lower()
- initcap() : 첫문자를 대문자로, 나머지 문자는 소문자로 (like 파스칼)
- varchar2 upper(컬럼)
- varchar2 lower(컬럼)
- varchar2 initcap(컬럼)
SELECT first_name,
upper(first_name),
lower(first_name)
FROM employees;
SELECT
'abc',
initcap('abc'),
initcap('aBc')
FROM dual;
-- 이름(first name)에 'an' 포함된 직원 조회 (단, 대소문자 구분없이)
SELECT
first_name
FROM employees
WHERE lower(first_name) LIKE '%an%';
2. 문자열 추출 함수
- substr()
- 자바의 substring()과 유사하다.
- varchar2 substr(컬럼, 시작위치, 가져올 문자 개수)
- varchar2 substr(컬럼, 시작위치)
SELECT
name,
ssn AS 주민등록번호,
substr(ssn, 1, 2) AS 생년,
substr(ssn, 3, 2) AS 생월,
substr(ssn, 5, 2) AS 생일,
substr(ssn, 8, 1) AS 성별
FROM tblinsa;
3. 문자열 길이
- length()
- number length(컬럼)
-- 컬럼 리스트에서 사용
SELECT name, length(name) FROM tblcountry;
-- 조건절에서 사용
SELECT name, length(name) FROM tblcountry WHERE LENGTH(name) > 3;
-- 정렬에서 사용
SELECT name, length(name) FROM tblcountry ORDER BY LENGTH(name) desc;
4. 문자열 검색(indexOf)
- instr()
- 검색어의 위치 반환
- number instr(컬럼, 검색어)
- number instr(컬럼, 검색어, 시작위치)
- number instr(컬럼, 검색어, 시작위치, -1) //lastIndexOf
- 못찾으면 0을 반환
SELECT
'안녕하세요. 홍길동님.',
instr('안녕하세요. 홍길동님.', '홍길동') AS r1,
instr('안녕하세요. 홍길동님.', '아무개') AS r2,
instr('안녕하세요. 홍길동님. 홍길동님', '홍길동') AS r3, -- 첫번째만 찾는다
instr('안녕하세요. 홍길동님. 홍길동님', '홍길동', 9) AS r4,
instr('안녕하세요. 홍길동님. 홍길동님', '홍길동', instr('안녕하세요. 홍길동님. 홍길동님', '홍길동')+LENGTH('홍길동')) AS r5, -- 비권장, 자바나 plsql의 도움을 받아 작성해야한다.
instr('안녕하세요. 홍길동님. 홍길동님', '홍길동', -1) AS r6
FROM dual;
5. 패딩
- lpad(), rpad()
- left padding, right padding
- varchar2 lpad(컬럼, 개수, 문자)
- varchar2 rpad(컬럼, 개수, 문자)
- 주어진 너비 갯수보다 컬럼 길이가 부족할 때, 문자로 채움
SELECT
lpad('a', 5), -- %5s
lpad('a', 5, 'b'), -- %b5s
lpad('aaa', 5, 'b') ,
lpad('aaaaaa', 5, 'b'),
lpad('1', 3, '0'),
rpad('1', 3, '0')
FROM dual;
6. 공백제거
- trim(), ltrim(), rtrim()
- varchar2 trim(컬럼)
- varchar2 ltrim(컬럼)
- varchar2 rtrim(컬럼)
SELECT
' 하나 둘 셋 ',
trim(' 하나 둘 셋 '),
ltrim(' 하나 둘 셋 '),
rtrim(' 하나 둘 셋 ')
FROM dual;
7. 문자열 치환
- replace()
- varchar2 replace(컬럼, 찾을 문자열, 바꿀 문자열)
- 못찾으면 원본을 반환
SELECT
replace('홍길동', '홍','김'),
replace('홍길동', '이','김'), -- 찾지 못하면 아무런 변화가 없음
replace('홍길홍', '홍','김') -- 여러개 바꿔준다.
FROM dual;
- regexp_replace()
SELECT
name,
regexp_replace(name, '김.{2}', '김oo'),
tel,
regexp_replace(tel, '(\d{3})-(\d{4})-\d{4}', '\1-\2-xxxx')
FROM tblinsa;
'ORACLE' 카테고리의 다른 글
[Oracle] 백업(dmp) 파일 만들기 (0) | 2023.09.20 |
---|---|
[Oracle] 숫자 함수, Numerical Function (0) | 2023.09.18 |
[Oracle] 집계 함수, Aggregation Function (0) | 2023.09.18 |
[Oracle] 조건문 함수 : CASE WHEN THEN / DECODE (0) | 2023.09.18 |
[Oracle] 연산자 및 별칭(alias) (0) | 2023.09.18 |