hyeonga_code
Database_15_문자 조작 함수_CONCAT, SUBSTR, LENGTH, LENGTHB, INSTR, LPAD, RPAD, TRIM, LTRIM, RTRIM 본문
Database_15_문자 조작 함수_CONCAT, SUBSTR, LENGTH, LENGTHB, INSTR, LPAD, RPAD, TRIM, LTRIM, RTRIM
hyeonga 2023. 7. 18. 05:59
-- 문자 조작 함수
-- CONCAT : 값을 결합합니다. 파라미터를 두 개만 사용할 수 있습니다.
-- SUBSTR : 지정한 길이의 문자열을 추출합니다.
-- LENGTH/LENGTHB : 문자열의 길이를 숫자 값으로 표시합니다.
-- INSTR : 지정한 문자의 위치를 숫자로 표시합니다.
-- LPAD : 문자 값을 오른쪽 정렬하고 빈 곳을 지정한 문자열로 채워줍니다.
-- RPAD : 문자 값을 왼쪽 정렬하고 빈 곳을 지정한 문자열로 채워줍니다.
-- TRIM : 문자열에서 접두어나 접미어 또는 두 가지 모두를 잘라줍니다.
-- LTRIM/RTRIM : 반복적인 문자 제거에 사용합니다.
-- REPLACE : 문자를 대체하여 반환합니다.
-- CONCAT
SELECT CONCAT(CONCAT(first_name,''), last_name) AS full_name,
CONCAT(email,'@oracle.com') AS email
FROM employees;
/*
FULL_NAME EMAIL
-------------------------------------------------------------
StevenKing SKING@oracle.com
NeenaKochhar NKOCHHAR@oracle.com
LexDe Haan LDEHAAN@oracle.com
...
*/
-- SUBSTR('지정 문자열', 시작 문자, 출력문자의 개수)
-- 시작 문자를 음수로 지정하는 경우 문자열의 끝부터 위치합니다.
SELECT SUBSTR('oracle database', 1, 6), SUBSTR('oracle database', 8, 4), SUBSTR('oracle database', -8, 4)
FROM DUAL;
/*
SUBSTR('oracle ...', 1, 6) SUBSTR('oracle...', 8, 4) SUBSTR('oracle ...', -8, 4)
------------------------------------------------------------------------------------------------------------------
oracle data data
*/
-- 성의 첫 세자리 숫자를 출력
SELECT last_name, SUBSTR(last_name, 1, 3)
FROM employees;
/*
LAST_NAME SUBSTR(LAST_NAME, 1, 3)
----------------------------------------------------------------
King Kin
Kochhar Koc
De Haan De
...
*/
-- 성이 A로 시작하는 사람
SELECT last_name
FROM employees
WHERE SUBSTR(last_name, 1, 1)='A';
-- = WHERE last_name LIKE 'A%';
/*
LAST_NAME
----------------------
Abel
*/
-- 성이 s로 끝나는 사람
SELECT last_name
FROM employees
WHERE SUBSTR(last_name, -1, 1)='s';
-- = WHERE last_name LIKE '%s';
/*
LAST_NAME
---------------------
Mourgos
Rajs
Davies
...
*/
-- LENGTH/LENGTHB > 숫자가 반환됩니다.
SELECT LENGTH('oracle'), LENGTH('오라클'), LENGTHB('oracle'), LENGTHB('오라클')
FROM dual;
/*
LENGTH('oracle') LENGTH('오라클') LENGTHB('oracle') LENGTHB('오라클')
---------------------------------------------------------------------------------------------------------------
6 3 6 9
*/
-- 성이 4자리 이하인 직원 정보
SELECT last_name
FROM employees
WHERE LENGTH(last_name)<=4;
/*
LAST_NAME
---------------
King
Rajs
Abel
Fay
*/
-- INSTR
-- 네 개의 인수까지 가능합니다.
-- INSTR('지정 문자열', 인수1)
-- 지정 문자열에서 인수1이 위치한 자리 수를 반환합니다.
-- INSTR('지정 문자열', 인수1, 시작 문자, 반복 횟수)
-- 지정 문자열에서 시작 문자의 위치부터 인수1이 반복 횟수번째 자리수를 반환합니다.
SELECT INSTR('oracle database', 'a'), INSTR('oracle database', 'a', 1, 3), INSTR('oracle database', 'j')
FROM dual;
/*
INSTR('oracle ...', 'a') INSTR('oracle ...', 'a', 1, 3) INSTR('oracle ...', 'j')
----------------------------------------------------------------------------------------------------------
3 11 0
*/
-- 성에 a문자가 들어가지 않는 직원 정보
SELECT last_name
FROM employees
WHERE INSTR(last_name, 'a')<>0;
-- = WHERE lsat_name LIKE '%a%';
/*
LAST_NAME
----------------------
Kochhar
De Haan
Rajs
...
*/
-- 성에 a문자가 포함되는 직원 정보
SELECT last_name
FROM employees
WHERE INSTR(last_name, 'a')=0;
-- = WHERE last_name LIKE '%a%';
/*
LAST_NAME
--------------------
King
Hunold
Ernst
...
*/
-- LPAD/RPAD ('지정 문자열', 자리수, '빈칸을 채울 문자')
-- 자리수 만큼 오른쪽/왼쪽 정렬을 하며 빈 칸은 문자로 채워 반환합니다.
SELECT LPAD('oracle', 10, '*'), RPAD('oracle', 10, '*')
FROM dual;
/*
LPAD('oracle', 10, '*') RPAD('oracle', 10, '*')
-------------------------------------------------------------------
****oracle oracle****
*/
SELECT RPAD(last_name, 15, '-'), LPAD(salary, 10, '*')
FROM employees;
/*
RPAD(last_name, 15, '-') LPAD(salary, 10, '*')
------------------------------------------------------------------
King----------- *****24000
Kochhar-------- *****17000
De Haan-------- *****17000
...
*/
-- TRIM ('제거할 접두어/접미어' FROM '지정 문자열')
-- 지정 문자열에서 맨 앞이나 맨 뒤의 문자를 제거합니다.
-- 연속되는 문자를 모두 제거할 수는 있지만 두 개 이상의 문자를 제거할 수 없습니다.
SELECT TRIM('w' FROM 'window'), TRIM(LEADING 'w' FROM 'window'), TRIM(TRAILING 'w' FROM 'window')
FROM dual;
/*
TRIM('w' FROM ' ') TRIM(LEADING 'w' FROM ' ') TRIM(TRAILING 'w' FROM ' ')
-------------------------------------------------------------------------------------------------------------------
indo indow windo
*/
-- LTRIM/RTRIM
-- 여러 개의 문자가 연속으로 되지 않아도 제거합니다.
-- 제거할 문자가 아닌 다른 문자가 있는 경우 제거를 중단하고 반환합니다.
-- 함수를 중첩하여 양끝의 여러 문자를 동시에 제거할 수 있습니다.
SELECT LTRIM('01010012345670101', '01'), LTRIM('010170012345670101', '01'), RTRIM('01010012345670101', '01')
FROM dual;
/*
LTRIM('0101...', '01') LTRIM('010170...', '01') RTRIM('01010...', '01')
----------------------------------------------------------------------------------------------------------
2345670101 70012345670101 0101001234567
*/
-- REPLACE
SELECT REPLACE('Jack and Jue', 'J', 'Bl')
FROM dual;
/*
REPLACE('Jack and Jue', 'J', 'Bl')
------------------------------------------------
Black and Blue
*/
'Oracle Database' 카테고리의 다른 글
Database_17_날짜 함수_SYSDATE, CURRENT_DATE, SYSTIMESTAMP, CURRENT_TIMESTAMP (0) | 2023.07.20 |
---|---|
Database_16_숫자 함수_ROUND, TRUNC, MOD, CEIL, FLOOR (0) | 2023.07.19 |
Database_14_문자 함수_DUAL, LOWER, UPPER, INITCAP (0) | 2023.07.17 |
Database_13_데이터 제한 및 관리_SET, UNION, UNION ALL, INTERSECT, MINUS, ORDER BY (0) | 2023.07.16 |
Database_12_데이터 제한 및 관리_논리 조건 연산자 (0) | 2023.07.15 |