[Oracle SQL] 변환함수-CAST, TO_CHAR,TO_DATE,TO_NUMBER

고동이의 IT·2021년 10월 8일
0

Oracle SQL

목록 보기
12/31
post-thumbnail

변환함수

  • 정의된 자료의 형을 일시적으로 변환하여 반환
  • CAST, TO_NUMBER, TO_DATE, TO_CHAR이 제공됨

1) CAST(expr AS 타입)

  • 'expr'로 정의된 데이터 또는 컬럼의 값을 '타입'형으로 변환(일시적)
  • '타입'은 오라클에서 사용될수 있는 데이터 타입

사용예)

SELECT PROD_ID,
              PROD_NAME,
              PROD_COST,
              CAST(PROD_PRICE AS VARCHAR2(10))--왼쪽정렬 ->문자열
         FROM PROD
        WHERE PROD_COST>=100000;

3) TO_DATE(c[,fmt])

  • 문자열 자료 c를 날짜형으로 명시적 형 변환
  • 'fmt'는 TO_CHAR에 사용된 형식지정 문자열과 같음. 단, 날짜형과 대응되지 못하는 형식지정문자열을 무시되거나 오류를 발생시킴

사용예) 장바구니테이블에서 2005년 6월 날짜별 판매자료를 조회하시오.
Alias는 날짜(앞8날짜,뒤5순번), 수량합계, 금액합계(수량*단가)이며 날짜순으로 출력하시오

   SELECT  TO_DATE(SUBSTR(A.CART_NO,1,8),'YYYY-MM-DD') AS 날짜, 
   -- TO_CHAR(TO_DATE(SUBSTR(A.CART_NO,1,8)),'YYYY-MM-DD') AS 날짜, 
           SUM(A.CART_QTY) AS 수량합계,
           SUM(A.CART_QTY*B.PROD_PRICE) AS 금액합계
     FROM CART A, PROD B
    WHERE A.CART_PROD=B.PROD_ID
      AND TO_DATE(SUBSTR(A.CART_NO,1,8)) BETWEEN TO_DATE('20050601')
          AND TO_DATE('20050630')
    GROUP BY  TO_DATE(SUBSTR(A.CART_NO,1,8),'YYYY-MM-DD')
    --  GROUP BY SUBSTR(A.CART_NO,1,8)
    ORDER BY 1;
    

사용예) 오늘날짜의 장바구니번호를 생성하시오

DECLARE
    V_CNT NUMBER:=0;
    V_DATE CHAR(8):=TO_CHAR(SYSDATE,'YYYYMMDD');
    V_CART_NO CHAR(13);
        
       BEGIN
         SELECT COUNT(*) INTO V_CNT
           FROM CART
          WHERE CART_NO LIKE V_DATE||'%';
          
          IF V_CNT=0 THEN
             V_CART_NO:=V_DATE||TRIM(TO_CHAR(1,'00000'));
         ELSE 
             SELECT MAX(CART_NO)+1 INTO V_CART_NO
               FROM CART
               WHERE CART_NO LIKE V_DATE||'%';
        END IF;
        
        DBMS_OUTPUT.PUT_LINE('CART번호: '||V_CART_NO);
        END;
        
        SELECT TO_CHAR(SYSDATE,'YYYYMMDD') 
        -- TO_DATE는 문자열을 날짜로 바꿈. SYSDATE는 이미 날짜라 안됨.
                                         
       -- SELECT TO_DATE('20210924','YYYYMMDD')는 가능. 
       TO_DATE는 출력을위한 포맷이아닌 연산을 위한 포맷
       -- TO_DATE를 쓸때는 YYYYMMDD 형식 쓸것.
          FROM DUAL;

4) TO_NUMBER(c[,fmt])

  • 숫자로 변형될 수 있는 문자열 c를 'fmt'형식에 맞추어 숫자형으로 변환
  • 'fmt'는 숫자로 변환가능한 형식문자열(9, 0, .)만 사용가능

사용예) 2005년 5월 7일 CART번호 생성

SELECT '20050507'||
               TRIM(TO_CHAR(MAX(TO_NUMBER(SUBSTR(CART_NO,9)))+1,
               '00000'))
              
              -- 오라클 내부적 결함으로 공백생겨서 TRIM써줘야함.
         FROM CART
        WHERE CART_NO LIKE '20050507%';
profile
삐약..뺙뺙

0개의 댓글