Oracle SQL変換関数-CAST、TO CHAR、TO DATE、TO NUMBER


へんかんかんすう
一時的に
  • で定義するデータ型を変換し、
  • を返す.
  • CAST、TO NUMBER、TO DATE、TO CHAR
    1)拡張ASタイプ(CAST)
  • 「expr」と定義されたデータまたは列の値を「タイプ」(一時)
  • に変換します.
  • 「タイプ」は、Oracleで使用可能なデータ型
  • です.
    使用例)
    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%';