본문 바로가기
오라클 게시판/오라클 함수

【오라클(Oracle) SQL 함수】 CAST 함수

by 기서무나구물 2018. 11. 12.

포스팅 목차

    o CAST

     


    문 법

     

    cast::=


    목 적

    CAST 함수는 데이터 형식이나 collection 형식을 다른 데이터 형식이나 collection 형식으로 변환한다.

    CAST함수는 편성된 데이터 타입 또는 컬렉션 타입 값을 다른 편성된 데이터 타입 또는 컬렉션 타입으로 변경한다. 이름이 없는 피연산자(일자 또는 서브 쿼리의 결과 세트와 같은) 또는 타입 호환 데이터 타입 또는 명명된 컬렉션에서 명명된 컬렉션(VARRAY 또는 중첩 테이블)을 형 변환할 수 있다. Type_name은 편성된 데이터형 또는 컬렉션 타입일 필요가 있고, 피연산자는 편성된 데이터형일 필요가 있고, 컬렉션 값을 평가할 필요가 있다.

    피연산자에서, expr은 평선 데이터형, 컬렉션 타입, AnyData타입의 인트턴스중에 하나일 수 있다. 만약 expr이 AnyData 타입의 인스턴스라면, CAST함수는 AnyData 인스턴스의 값을 추출을 시도하고, 만약 cast target 타입과 일치하면 값을 반환하고, 일치하지 않으면 Null을 반환한다. MULTISET은 서브 쿼리의 결과 세트를 취해 오라클 데이터베이스에 알리고, 컬렉션 값을 반환한다. Table 7-1은 편성된 데이터형을 취해서 다른 편성 데이터형으로 형변환할수 있는지 보인다.(CAST함수는 LONG, LONG RAW, LOB 데이터형, 오라클 지원 형태를 지원하지 않는다.)

     

    Table 7-1 편성된 데이터형의 형변환

      from BINARY_FLOAT, BINARY_DOUBLE from CHAR, VARCHAR2 fromNUMBER from DATETIME / INTERVAL (Note 1) fromRAW from ROWID, UROWID (Note 2) from NCHAR, NVARCHAR2
    to BINARY_FLOAT, BINARY_DOUBLE X X X X
    to CHAR, VARCHAR2 X X X X X X
    to NUMBER X X X X
    to DATE, TIMESTAMP, INTERVAL X X
    to RAW X X
    to ROWID, UROWID X Xa
    to NCHAR, NVARCHAR2 X X X X X X
     

    주1: Datetime/interval은 DATE, TIMESTAMP, TIMESTAMP WITH TIMEZONE, INTERVAL DAY TO SECOND, and INTERVAL YEAR TO MONTH 을 포함한다.

    주2: 만약 UROWID가 색인 구성표의 ROWID의 값을 포함하면, UROWID를 ROWID로 형 변환할 수 없다.

    만약 명명된 컬렉션 타입을 다른 명명된 컬렉션 타입으로 형 변환을 원한다면, 양쪽 컬렉션의 요소는 같은 형태일 필요가 있다.

    만약 서브 쿼리의 결과 세트가 다중 행을 평가할 수 있다면, MULTISET 키워드를 지정할 필요가 있다. 서브 쿼리로부터 결과 행은 형 변환된 컬렉션 값의 요소를 형성한다. MULTISET키워드를 생략하면, 서브 쿼리는 스칼라 서브 쿼리로서 처리된다.

     


    패키지 함수 비교 - Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table

     


    관련함수

    함수명 함수내용
    CAST 데이터 형식이나 collection 형식을 다른 데이터 형식이나 collection 형식으로 변환한다.
    TO_CHAR (number) 수치형의 값 n을 옵션의 number 포맷 fmt에서 지정한 VARCHAR2 데이터 타입의 문자열 값으로 변환한다. 수치형 데이터를 문자열로 변환하는 함수이다.
    TO_CHAR (datetime) datetime 또는 날짜의 구간 값, TIMESTAMP, TIME 구역을 가지는 TIMESTAMP, 또는 TIMESTAMP WITH LOCAL TIME ZONE 데이터 형을 date 포맷 fmt에서 지정한 포맷의 VARCHAR2 데이터 타입의 문자열 값으로 변환(문자형 날짜 함수)한다. 날짜형 데이터를 문자열로 변환하는 함수이다.
    TO_CHAR (character) NCHAR, NVARCHAR2, CLOB, NCLOB 데이터를 데이터 베이스 문자 세트로 변환한다. (문자변환함수)
    TO_DATE CHAR, VARCHAR2, NCHAR, NVARCHAR2 데이터형의 문자열 char을 날짜형 데이터 타입 값으로 변환하는 형 변환 작업을 수행한다. 문자형 날짜 데이터를 날짜형 데이터로 변환하는 함수이다.
    TO_NUMBER 인수 expr을 NUMBER 데이터형의 값으로 변환한다.

    [오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크]

     


    예 제

    • Built-In Datatype 예제

    다음 예제는 스칼라 데이터형과 함께 CAST함수를 이용한다.

    Oracle Programming
    SELECT CAST('22-OCT-1997' AS TIMESTAMP WITH LOCAL TIME ZONE) 
       FROM dual;
    
    SELECT product_id, 
       CAST(ad_sourcetext AS VARCHAR2(30))
       FROM print_media;

     


    • Collection 예제

    계속되는 CAST예제는 샘플 주문 엔트리 스키마 oe에 기초하여 cust_address_typ에 근거한다.

    Oracle Programming
    CREATE TYPE address_book_t AS TABLE OF cust_address_typ;
    /
    CREATE TYPE address_array_t AS VARRAY(3) OF cust_address_typ;
    /
    CREATE TABLE cust_address (
       custno            NUMBER, 
       street_address    VARCHAR2(40), 
       postal_code       VARCHAR2(10), 
       city              VARCHAR2(30),
       state_province    VARCHAR2(10), 
       country_id        CHAR(2));
    
    CREATE TABLE cust_short (custno NUMBER, name VARCHAR2(31));
    
    CREATE TABLE states (state_id NUMBER, addresses address_array_t);
    
    

     


    이 예제는 서브 쿼리를 형 변환한다.

    Oracle Programming
    SELECT s.custno, s.name,
       CAST(MULTISET(SELECT ca.street_address,   
                            ca.postal_code, 
                            ca.city, 
                            ca.state_province, 
                            ca.country_id
                     FROM cust_address ca
                     WHERE s.custno = ca.custno)
       AS address_book_t)
    FROM cust_short s;

     


    CAST는 varray 타입 열을 중첩 테이블로 변환한다.

    Oracle Programming
    SELECT CAST(s.addresses AS address_book_t)
       FROM states s 
       WHERE s.state_id = 111; 
    
    

     


    다음 오브젝트는 이후 예제의 기초를 생성한다.

    Oracle Programming
    CREATE TABLE projects 
       (employee_id NUMBER, project_name VARCHAR2(10));
    
    CREATE TABLE emps_short 
       (employee_id NUMBER, last_name VARCHAR2(10));
    
    CREATE TYPE project_table_typ AS TABLE OF VARCHAR2(10);
       /
    

     


    다음 MULTISET 표현의 예제는 위 오브젝트를 이용한다.

    Oracle Programming
    SELECT e.last_name,
       CAST(MULTISET(SELECT p.project_name
       FROM projects p 
       WHERE p.employee_id = e.employee_id
       ORDER BY p.project_name)
       AS project_table_typ)
    FROM emps_short e;

     


     

    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크 링크
    반응형

    댓글