[Oracle] 단일행 함수 / 문자열 함수

라라·2023년 4월 3일
0

Oracle

목록 보기
4/16

📂 단일행 함수

☑️ 단일행 함수 : 테이블의 모든 행에 결과가 반환되는 함수
 - 문자, 숫자, 날자, 형변환, 선택함수 (조건활용)

➡️ SELECT 문의 컬럼을 작성하는 부분 :
 - WHERE절, INSERT, UPDATE, DELETE 문에서 사용이 가능


📍 문자열 갯수 출력하기 ( LENGTH )

👉 LENGTH( '문자열' || 컬럼명 ) -> 문자열의 갯수를 출력

SELECT LENGTH ( '오늘 월요일 힘내요!' ) -- 11
FROM DUAL;

SELECT EMAIL, LENGTH(EMAIL)
FROM EMPLOYEE;

✏️ 이메일이 16글자 이상인 사원명, 이메일을 조회하기
SELECT EMP_NAME, EMAIL, LENGTH (EMAIL)
FROM EMPLOYEE
WHERE LENGTH (EMAIL) >= 16;



📍 차지하는 BYTE를 출력하기 ( LENGTHB )

👉 EXPRESS 버전에서 한글을 3BYTE로 저장함, ENTERPRISE 버전에서는 2BYTE

SELECT LENGTHB ('ABCD'), LENGTHB ('월요일')
FROM EMPLOYEE;   ABCD → 4 / 월요일 → 9



📍 글자의 위치 찾기 ( INSTR )

👉 INSTR( '문자열' || 컬럼, '찾을 문자' [ , 시작위치, 찾을번째 (횟수) ] )
👉 JAVA의 INDEXOF와 유사한 기능

❗ 인덱스번호 0이 아니라 1부터 시작
❗ 조회 결과가 0이 나오면 값이 없는 것이다.

SELECT INSTR ( 'RA아카데미', 'RA' ), -- 1
INSTR ( 'RA아카데미', '아' ), -- 3
INSTR ( 'RA아카데미', '하' ) -- 0
FROM DUAL;

❗ ' - ' 를 붙이면 뒤부터 확인한다.

SELECT INSTR ( 'RA아카데미 RA게임즈 RA음악사 RA파이팅', 'GD' ), -- 1
INSTR ( 'RA아카데미 RA게임즈 RA음악사 RA파이팅', 'RA', 3 ), -- 8
INSTR ( 'RA아카데미 RA게임즈 RA음악사 RA파이팅', 'RA', -1 ), -- 20
INSTR ( 'RA아카데미 RA게임즈 RA음악사 RA파이팅', 'RA', 1, 3 ) -- 14
FROM DUAL;

✏️ 사원테이블 이메일에서 @의 위치를 찾기

SELECT EMP_NAME, EMAIL, INSTR ( EMAIL,'@' )
FROM EMPLOYEE;



📍 문자열의 길이가 지정한 길이만큼 차지 않았을 때 공백을 채워주는 함수 ( LPAD / RPAD )

👉 LPAD / RPAD ( 문자열 || 컬럼, 최대길이, 대체문자 )

❗ BYTE 단위로 계산, 입력 안하면 공백

SELECT LPAD('가나다', 10, '*'), -- 가나다 6 BYTE
RPAD('가나다', 10, '@'),
LPAD('가나다', 10)
FROM DUAL;

SELECT EMAIL, RPAD (EMAIL, 20, '#')
FROM EMPLOYEE;



📍 공백을 삭제하는 함수, 특정문자를 지정 ( LTRIM / RTRIM )

👉 LTRIM (왼쪽) / RTRIM (오른쪽) ( '문자열' || 컬럼 [ , '특정문자' ] )

SELECT '  라라 ', LTRIM ( '  라라' ),
RTRIM ( ' 라라 ' ), RTRIM ( ' 라 라 ' )
FROM DUAL;

SELECT '라라2222',
RTRIM ( '라라2222', '2' ), -- 라라2222
RTRIM ( '라라22122' , '2' ), -- 라라221
RTRIM ( '라라22122' , '12' ) -- 라라
FROM DUAL;



📍 양쪽에 있는 값을 제거하는 함수 ( TRIM )

👉 TRIM ( '문자열' || 컬럼 )
👉 기본 : 공백, 설정하면 설정값을 제거 (하나의 문자만 지정 가능)
👉 TRIM ( LEADING || TRAILING || BOTH '제거할 문자' FROM '문자열' || 컬럼명 )

SELECT '  월요일  ' , TRIM ( '  월요일  ' ),
' ZZZZZZ마징가ZZZZZ ', TRIM ( 'Z' FROM 'ZZZZZZ마징가ZZZZZ' ),
TRIM ( LEADING 'Z' FROM 'ZZZZZZ마징가ZZZZZ' ), -- 왼쪽 지워짐
TRIM ( TRAILING 'Z' FROM 'ZZZZZZ마징가ZZZZZ' ), -- 오른쪽 지워짐
TRIM ( BOTH 'Z' FROM 'ZZZZZZ마징가ZZZZZ' ) -- 양쪽 지워짐
FROM EMPLOYEE;



📍 문자열을 잘라내는 기능 ( SUBSTR )

👉 SUBSTR ( '문자열' || 컬럼명, 시작 인덱스 번호 [ , 길이 ] )
👉 JAVA의 SUBSTRING 메소드와 동일

SELECT SUBSTR ( 'SHOWMETHEMONEY' , 5), -- 5번째부터 (METHEMONEY)
SUBSTR ('SHOWMETHEMGONEY', 5, 2), -- 5번째부터 2글자 (ME)
SUBSTR ('SHOWMETHEMONEY', INSTR('SHOWMETHEMONEY', 'MONEY')), -- MONEY
SUBSTR ('SHOWMETHEMONEY', -3), -- 뒤에서부터 3글자 (NEY)
SUBSTR ('SHOWMETHEMONEY', -5, 2) -- MO
FROM DUAL;

✏️ 사원의 이메일에서 아이디값만 출력하기

SELECT EMP_NAME, EMAIL, SUBSTR ( EMAIL, 1, INSTR (EMAIL, '@') -1 )
FROM EMPLOYEE;

✏️ 사원의 성별을 표시하는 번호를 출력하기, 여자사원만 조회

SELECT EMP_NAME, EMP_NO, SUBSTR(EMP_NO,8,1)
FROM EMPLOYEE
WHERE SUBSTR (EMP_NO,8,1) IN (2,4);



📍 영문자를 처리하는 함수 ( UPPER / LOWER / INITCAP )

SELECT UPPER ('Welcome To oRACLE worLd'),
-- WELCOME TO ORACLE WORLD
LOWER ('Welcome To oRACLE worLd'),
-- welcome to oracle world
INITCAP ('Welcome To oRACLE worLd')
-- Welcome To Oracle World
FROM DUAL;



📍 문자열을 결합해 주는 함수 ( CONCAT )

👉 || 연산자와 동일

SELECT EMP_NAME || EMAIL, CONCAT (EMP_NAME, EMAIL),
CONCAT (CONCAT (EMP_NAME, EMAIL), SALARY)
FROM EMPLOYEE;



📍 대상문자(컬럼)에서 지정문자를 찾아서 특정문자로 변경하는 함수 ( REPLACE )

👉 REPLACE ( '문자열' || 컬럼명, '찾을문자', '대체문자' )

SELECT EMAIL, REPLACE (EMAIL, 'RA', 'NA')
FROM EMPLOYEE;



📍 문자열을 거꾸로 만들어 주는 함수 ( REVERSE )

👉 REPLACE ( '문자열' || 컬럼명, '찾을문자', '대체문자' )

SELECT EMAIL, REVERSE (EMAIL), EMP_NAME, REVERSE(EMP_NAME), REVERSE (REVERSE (EMP_NAME))
FROM EMPLOYEE;



📍 매칭되는 문자로 변경해 주는 함수 ( TRANSLATE )

SELECT TRANSLATE ('010-1004-1542', '0123456789', '영일이삼사오육칠팔구') -- 영일영-일영영사-일오사이
FROM DUAL;



profile
코딩하는 라라 :)

0개의 댓글