온풀투데이

[오라클] CONCAT() / SUBSTR() / LENGTH() 본문

DATABASE

[오라클] CONCAT() / SUBSTR() / LENGTH()

온풀 2022. 3. 11. 00:45
20220221_01_scott.sql / 오라클 6일 차

CONCAT()

  • 문자열을 결합하는 기능을 가진 함수 CONCAT()
  • 오로지 2개의 문자열만 결합시켜줄 수 있다.
  • 내부적으로 형 변환이 일어나며 결합을 수행하게 된다.
  • CONCAT()은 문자열과 문자열을 결합시켜 주는 함수이지만
  • 내부적으로 숫자나 날짜를 문자로 바꾸어주는 과정이 포함되어 있다.

SUBSTR() 추출 갯수 기반 / SUBSTRB() 추출 바이트 기반

SELECT ENAME "COL1"
     , SUBSTR(ENAME, 1, 2) "COL2"
FROM EMP;
--> 문자열을 추출하는 기능을 가진 함수
--  첫 번째 파라미터 값은 대상 문자열(추출의 대상, TARGET)
--  두 번째 파라미터 값은 추출을 시작하는 위치(인덱스는 1부터 시작)
--  세 번째 파라미터 값은 추출할 문자열의 갯수(생략 시... 끝까지)
--==>>
/*
SMITH    SM
ALLEN    AL
WARD    WA
JONES    JO
MARTIN    MA
BLAKE    BL
CLARK    CL
SCOTT    SC
KING    KI
TURNER    TU
ADAMS    AD
JAMES    JA
FORD    FO
MILLER    MI
*/

TBL_SAWON 테이블에서 성별이 남성인 사원만 사원번호, 사원명, 주민번호, 급여 항목을 조회한다.

  • 단, SUBSTR() 함수를 활용할 수 있도록 한다.
ELECT SANO "사원번호", SANAME "사원명", JUBUN "주민번호", SAL "급여"
FROM TBL_SAWON
WHERE SUBSTR(JUBUN, 7, 1) = '1' OR SUBSTR(JUBUN, 7, 1) = '3';
--WHERE SUBSTR(JUBUN, 7, 1) = 1 OR SUBSTR(JUBUN, 7, 1) = 3;
--> 이것도 되지만 SUBSTR은 문자를 반환하기 때문에 문자로 처리하는 것이 맞다.
--==>>
/*
1001    김민성    9707251234567    3000
1005    오이삭    9805161234567    4000
1007    박한이    0204053234567    1000
1008    선동렬    6803171234567    1500
1011    남주혁    0506073234567    2600
1012    남궁민    0208073234567    2600
1013    남진    6712121234567    2200
*/

SELECT SANO "사원번호", SANAME "사원명", JUBUN "주민번호", SAL "급여"
FROM TBL_SAWON
WHERE SUBSTR(JUBUN, 7, 1) IN ('1', '3');
--==>>
/*
1001    김민성    9707251234567    3000
1005    오이삭    9805161234567    4000
1007    박한이    0204053234567    1000
1008    선동렬    6803171234567    1500
1011    남주혁    0506073234567    2600
1012    남궁민    0208073234567    2600
1013    남진    6712121234567    2200
*/

LENGTH() 글자 수 / LENGTHB() 바이트 수

SELECT ENAME "COL1"
     , LENGTH(ENAME) "COL2"
     , LENGTHB(ENAME) "COL3"
FROM EMP;
--==>> 
/*
SMITH    5    5
ALLEN    5    5
WARD    4    4
JONES    5    5
MARTIN    6    6
BLAKE    5    5
CLARK    5    5
SCOTT    5    5
KING    4    4
TURNER    6    6
ADAMS    5    5
JAMES    5    5
FORD    4    4
MILLER    6    6
*/