Eggs Sunny Side Up
본문 바로가기
Computer Engineering/DB_Oracle

SELECT_03.함수

by guswn100059 2023. 2. 27.

1. 내장형함수

더보기

<내장형함수>

문자형 함수 : LOWER, UPPER, SUBSTR, TRIM, REPLACE

숫자형 함수 : MOD, ROUND

날짜형 함수 : LAST_DAY, ADD_MONTHS, SYSDATE

[문자형 함수]

 

LOWER

 

UPPER

 

SUBSTR

예제 1)

SELECT SUBSTR('https://smhrd.or.kr/', 9, 5)
  FROM DUAL;

예제 2)

SELECT 직원ID
     , 주민등록번호
     , SUBSTR(주민등록번호, 1, 6)
  FROM 직원;

예제 3) 

/* 
6. 직원연락처 테이블에서 연락처 컬럼의 데이터를 앞에 3자리만 추출하여 
   010 이면 휴대폰 , 아니면 집전화로 판단하려고 합니다. 
   다음과 같이 출력되도록 해주세요 (WHERE 사용 안함)

   직원ID   구분코드      연락처     연락처앞자리만 ( <- AS로 만든 컬럼임) 
   A0001	집전화	062-123-1234	062
   A0001	휴대폰	010-1231-1234	010
   A0002	집전화	062-254-6342	062
    ...      ...         ...        ... 
*/
SELECT 직원ID
      , 구분코드
      , 연락처
      , SUBSTR(연락처, 1, 3) AS 연락처앞자리만
  FROM 직원연락처;

 

TRIM

 

REPLACE

예제 1)

SELECT 직원ID
     , 구분코드
     , 연락처
     , REPLACE(연락처, '-', '')
  FROM 직원연락처;

예제 2) 

/* 
7. 직원 테이블에서 패스워드 컬럼에 대해 ! 기호를 사용하지 말라는 요청이 들어왔습니다.
   ! 기호를 @ 기호로 바꾼 값으로 출력을 해주세요 (where 사용 안함) 
    
   출력예시 ) 
   직원id , 패스워드 , 변경된패스워드 (<-AS 처리된 컬럼 )  
*/ 
SELECT 직원ID
     , 패스워드
     , REPLACE(패스워드, '!', '@') AS 변경된패스워드
  FROM 직원;

 

 

[숫자형 함수]

 

MOD

 

ROUND

[날짜형 함수]

 

SYSDATE

--실무에서는 아래와 같이 날짜를 조작하기도 한다.

SELECT SYSDATE + 1 AS 하루더함
     , SYSDATE + 1/24 AS 한시간더함
     , SYSDATE + 1/24/60 AS 일분더함
     , SYSDATE + 1/24/60/60 AS 일초더함
  FROM DUAL;

예제 1)

SELECT SYSDATE + 3 AS DAY3일후
  FROM DUAL;

 

LAST_DAY

 

ADD_MONTHS

예제 1)

SELECT 직원ID
     , 입사일시
     , ADD_MONTHS(입사일시 + 60) AS 오년후입사일시
  FROM 직원;

 

2. 형변환함수

SELECT TO_NUMBER('1') FROM DUAL ; -- 문자형('1')을 숫자형(1) 로 형변환해 출력

SELECT TO_CHAR(1) FROM DUAL ; --숫자형(1)을 문자형('1') 로 형변환해 출력

SELECT TO_CHAR(SYSDATE , 'YYYY/MM/DD HH24:MI:SS') FROM DUAL ; 

SELECT TO_DATE('20230101' , 'YYYY/MM/DD') FROM DUAL ; 

SELECT TO_DATE('20230101141212' , 'YYYY/MM/DD HH24:MI:SS') FROM DUAL; 

/*
3번 문제는 날짜형(SYSDATE) 을 문자형으로 변경합니다. (포맷의미는 꼭 외웁시다!)
4번 문제는 문자형('2023010114')을 날짜형 (2023/01/01 14:00:00) 으로 변경합니다.
5번 문제는 문자형('20230101141212')을 날짜형(2023/01/01 14:12:12) 으로 변경합니다. 
*/

문제 1)

SELECT 직원ID
     , 입사일시
     , TO_CHAR(입사일시, 'YYYY') AS 입사연도
  FROM 직원 ;

 

문제 2)

SELECT 직원ID
     , 나이
     , (나이 + 1) AS 올해나이
  FROM 직원 ;

 

 

3. NULL 함수 사용하기

 

 

NVL(data1, data2)

 

NVL2(data1, data2, data3)

 

DECODE(data1, data2, data3, data4)

 

COALESCE(data1, data2, data3, ... , dataN)

 

문제)

-- 1.
SELECT 직원ID
     , 패스워드
     , NVL(나이, 20) AS 나이
  FROM 직원 ;
  
-- 2.
SELECT 직원ID
     , 성별
     , 연봉
     , DECODE(성별, '남', '남성입니다', '여성입니다') AS 남녀확인
  FROM 직원 ;

'Computer Engineering > DB_Oracle' 카테고리의 다른 글

230228_복습용문제  (0) 2023.02.28
WHERE_01. 비교조건과 논리조건  (0) 2023.02.27
SELECT_02.연산&함수  (0) 2023.02.27
SELECT_01.기본  (0) 2023.02.27
1. 오라클 데이터베이스  (0) 2023.02.25

댓글