[Oracle] 문자열 함수, String Function

수경·2023년 9월 3일
0
post-thumbnail

문자열 함수, 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;

profile
웹백엔드개발자를 꿈꾸는

0개의 댓글