CAST 함수

CAST는 한 데이터 유형에서 다른 데이터 유형으로 하나 이상의 값을 변환하는 복합 함수입니다.

구문

주: 실제로는 위의 모든 매개변수를 동시에 지정할 수 없습니다. 예를 들면, CCSID 및 ENCODING 표현식은 문자열 대 문자열 변환에서만 적용되는 반면 FORMAT은 문자열-숫자 및 문자열-datetime 변환(양방향으로)에만 적용됩니다.

CAST는 한 데이터 유형에서 다른 데이터 유형으로 하나 이상의 값을 변환합니다. 예를 들면, 일반 XML 메시지를 처리할 때 CAST 함수를 사용할 수 있습니다. 예를 들면, XML 메시지의 모든 필드는 문자 값을 보유하므로, 필드에서 산술 계산이나 data/time 비교를 수행하려는 경우에는 CAST를 사용하여 이 필드의 문자열 값을 적절한 유형의 값으로 변환할 수 있습니다.

모든 변환이 지원되는 것은 아닙니다. 지원되는 변환의 목록은 지원되는 캐스트를 참조하십시오.

매개변수

소스 표현식

CAST는 둘 이상의 값을 포함할 수 있는 첫 번째 매개변수(source_expression)를 두 번째 매개변수로 지정된 데이터 유형(DataType)으로 리턴합니다. ]모든 경우에 소스 표현식이 널(null)인 경우 결과는 널(null)입니다. 평가된 소스 표현식이 대상 데이터 유형과 호환되지 않거나 소스 표현식의 형식이 잘못된 경우 런타임 오류가 생성됩니다.

CCSID

CCSID 절은 문자열 데이터 유형 중 하나로의 변환에만 사용됩니다. 소스 또는 대상 문자열의 코드 베페이지를 지정할 수 있습니다.

CCSID 표현식은 INT 유형의 값으로 평가되는 표현식일 수 있습니다. CCSID에 대한 정상 WebSphere Message Broker 규칙에 따라 해석됩니다. 유효한 값 목록은 지원되는 코드 페이지를 참조하십시오.

DataType

DataType은 소스 값을 변환하는 데이터 유형입니다. 사용 가능한 값은 다음과 같습니다.
  • 문자열 유형:
    • BIT
    • BLOB
    • CHARACTER
  • 숫자 유형:
    • DECIMAL
    • FLOAT
    • INTEGER
  • 날짜/시간 유형:
    • DATE
    • GMTTIME
    • GMTTIMESTAMP
    • INTERVAL
    • TIME
    • TIMESTAMP
  • Boolean:
    • BOOLEAN

DEFAULT

DEFAULT 절은 리턴할 마지막 값을 제공하여 CAST문에서 예외 처리를 피하는 방법을 제공합니다.

DEFAULT expressionDataType 매개변수에서 지정된 것과 동일한 데이터 유형을 리턴하는 유효한 ESQL 표현식이어야 하며 그렇지 않으면 예외가 발생합니다.

CCSID, ENCODING 및 FORMAT 매개변수는 DEFAULT 표현식의 결과에 적용되지 않으며 따라서 이 표현식은 올바른 CCSID, ENCODING 및 FORMAT으로 되어 있어야 합니다.

ENCODING

ENCODING절을 통해 인코딩을 지정할 수 있습니다. 이는 특정 변환에만 사용됩니다. ENCODING 값은 INT 유형의 값으로 평가되는 표현식일 수 있습니다. 인코딩에 대한 정상 WebSphere Message Broker 규칙에 따라 해석됩니다. 올바른 값은 다음과 같습니다.
  • MQENC_NATIVE (0x00000222L)
  • MQENC_INTEGER_NORMAL (0x00000001L)
  • MQENC_INTEGER_REVERSED (0x00000002L)
  • MQENC_DECIMAL_NORMAL (0x00000010L)
  • MQENC_DECIMAL_REVERSED (0x00000020L)
  • MQENC_FLOAT_IEEE_NORMAL (0x00000100L)
  • MQENC_FLOAT_IEEE_REVERSED (0x00000200L)
  • MQENC_FLOAT_S390 (0x00000300L)

FORMAT

문자열 데이터 유형과 숫자 또는 날짜-시간 데이터 유형 간의 변환의 경우 선택적 FORMAT 표현식을 제공할 수 있습니다. 문자열 유형에서 변환하는 경우 FORMAT은 대상 데이터 유형을 채우기 위해 소스 문자열을 구문 분석하는 방법을 정의합니다. 문자열 유형으로 변환하는 경우 소스 표현식의 데이터를 대상 문자열에서 형식화하는 방법을 정의합니다.

FORMAT은 날짜-시간 및 숫자 변환에 다른 유형의 표현식을 사용합니다. 그러나 문자열로 변환되는지 아니면 문자열에서 변환되는지 여부에 상관 없이 동일한 FORMAT 표현식을 사용할 수 있습니다.

캐스트할 때 FORMAT 표현식을 지정할 수 있습니다.
  • 문자열 데이터 유형(BIT, BLOB 또는 CHARACTER)에서 다음으로 지정:
    • DECIMAL
    • FLOAT
    • INTEGER
    • DATE
    • GMTTIMESTAMP
    • TIMESTAMP
    • GMTTIME
    • TIME
  • 이전 글머리표에 나열된 모든 숫자 및 날짜-시간 데이터 유형에서 모든 문자열 데이터 유형(BIT, BLOB 또는 CHARACTER)으로 지정.
소스와 대상 데이터 유형의 지원되지 않는 결합에 FORMAT을 지정하면 오류 메시지 BIP3205가 발행됩니다.

숫자 데이터 유형으로의 변환에 대한 자세한 정보는 문자열로 숫자 형식화 및 구문 분석을 참조하십시오. 날짜-시간 데이터 유형으로의 변환에 대한 자세한 정보는 문자열로 dateTimes 형식화 및 구문 분석을 참조하십시오.

FORMAT 표현식은 ICU 및 Microsoft Excel과 같은 다른 많은 제품에서 사용된 표현식에 해당합니다.

예 1. DECIMAL에서 CHARACTER로 형식화된 CAST

DECLARE source DECIMAL 31415.92653589;
DECLARE target CHARACTER;
DECLARE pattern CHARACTER '#,##0.00';
SET target = CAST(source AS CHARACTER FORMAT pattern);
-- target is now "31,415.93"

예 2 DATE에서 CHARACTER로 형식화된 CAST

DECLARE now CHARACTER = CAST(CURRENT_TIMESTAMP AS CHARACTER 
                        FORMAT "yyyyMMdd-HHmmss");
-- target is now "20041007-111656" (in this instance at least)

예 3. CHARACTER에서 DATE로 형식화된 CAST

DECLARE source CHARACTER '01-02-03';
DECLARE target DATE;
DECLARE pattern CHARACTER 'dd-MM-yy';
SET target = CAST(source AS DATE FORMAT pattern);
-- target now contains Year=2003, Month=02, Day=01

예 4. CHARACTER에서 TIMESTAMP로 형식화된 CAST

DECLARE source CHARACTER '12 Jan 03, 3:45pm';
DECLARE target TIMESTAMP;
DECLARE pattern CHARACTER 'dd MMM yy, h:mma';
SET target = CAST(source AS TIMESTAMP FORMAT pattern);
-- target now contains Year=2003, Month=01, Day=03, Hour=15, Minute=45, Seconds=58 
-- (seconds taken from CURRENT_TIME since not present in input)

예 5. DECIMAL에서 CHARACTER로 부정적인 패턴으로 형식화된 CAST

DECLARE source DECIMAL -54231.122;
DECLARE target CHARACTER;
DECLARE pattern CHARACTER '#,##0.00;(#,##0.00)';
SET target = CAST(source AS CHARACTER FORMAT pattern);
-- target is now "£(54,231.12)"

예 6. CHARACTER에서 TIME로 형식화된 CAST

DECLARE source CHARACTER '16:18:30';
DECLARE target TIME;
DECLARE pattern CHARACTER 'hh:mm:ss';
SET target = CAST(source AS TIME FORMAT pattern);
-- target now contains  Hour=16, Minute=18, Seconds=30

예 7. 숫자 유형에서 DATE로의 CAST

CAST(7, 6, 5 AS DATE);
CAST(7.4e0, 6.5e0, 5.6e0 AS DATE);
CAST(7.6, 6.51, 5.4 AS DATE);

예 8. 숫자 유형에서 TIME로의 CAST

CAST(9, 8, 7 AS TIME);
CAST(9.4e0, 8.6e0, 7.1234567e0 AS TIME);
CAST(9.6, 8.4, 7.7654321 AS TIME);

예 9. 숫자 유형에서 GMTTIME로의 CAST

CAST(DATE '0001-02-03', TIME '04:05:06' AS TIMESTAMP);
CAST(2, 3, 4, 5, 6, 7.8 AS TIMESTAMP);

예 10. TIMESTAMP로의 CAST

CAST(DATE '0001-02-03', TIME '04:05:06' AS TIMESTAMP);
CAST(2, 3, 4, 5, 6, 7.8 AS TIMESTAMP);

예 11. GMTTIMESTAMP로의 CAST

CAST(DATE '0002-03-04', GMTTIME '05:06:07' AS GMTTIMESTAMP);
CAST(3, 4, 5, 6, 7, 8 AS GMTTIMESTAMP);
CAST(3.1e0, 4.2e0, 5.3e0, 6.4e0, 7.5e0, 8.6789012e0 AS GMTTIMESTAMP);
CAST(3.2, 4.3, 5.4, 6.5, 7.6, 8.7890135 AS GMTTIMESTAMP);

예 12. INTEGER에서 INTERVAL로의 CAST

CAST(1234 AS INTERVAL YEAR);
CAST(32, 10 AS INTERVAL YEAR   TO MONTH );
CAST(33, 11 AS INTERVAL DAY    TO HOUR  );
CAST(34, 12 AS INTERVAL HOUR   TO MINUTE);
CAST(35, 13 AS INTERVAL MINUTE TO SECOND);
CAST(36, 14, 10  AS INTERVAL DAY  TO MINUTE);
CAST(37, 15, 11  AS INTERVAL HOUR TO SECOND);
CAST(38, 16, 12, 10 AS INTERVAL DAY TO SECOND);

예 13. INTERVAL에서 FLOAT로의 CAST

CAST(2345.67e0   AS INTERVAL YEAR  );
CAST(3456.78e1   AS INTERVAL MONTH );
CAST(4567.89e2   AS INTERVAL DAY   );
CAST(5678.90e3   AS INTERVAL HOUR  );
CAST(6789.01e4   AS INTERVAL MINUTE);
CAST(7890.12e5   AS INTERVAL SECOND);
CAST(7890.1234e0 AS INTERVAL SECOND);

예 14. DECIMAL에서 INTERVAL로의 CAST

CAST(2345.67   AS INTERVAL YEAR  );
CAST(34567.8   AS INTERVAL MONTH );
CAST(456789    AS INTERVAL DAY   );
CAST(5678900   AS INTERVAL HOUR  );
CAST(67890100  AS INTERVAL MINUTE);
CAST(789012000 AS INTERVAL SECOND);
CAST(7890.1234 AS INTERVAL SECOND);

예 15. INTERVAL에서 FLOAT로의 CAST

CAST(INTERVAL '1234' YEAR   AS FLOAT);
CAST(INTERVAL '2345' MONTH  AS FLOAT);
CAST(INTERVAL '3456' DAY    AS FLOAT);
CAST(INTERVAL '4567' HOUR   AS FLOAT);
CAST(INTERVAL '5678' MINUTE AS FLOAT);
CAST(INTERVAL '6789.01' SECOND AS FLOAT);

예 16. INTERVAL에서 DECIMAL로의 CAST

CAST(INTERVAL '1234' YEAR   AS DECIMAL);
CAST(INTERVAL '2345' MONTH  AS DECIMAL);
CAST(INTERVAL '3456' DAY    AS DECIMAL);
CAST(INTERVAL '4567' HOUR   AS DECIMAL);
CAST(INTERVAL '5678' MINUTE AS DECIMAL);
CAST(INTERVAL '6789.01' SECOND AS DECIMAL);

예 17. 실패하고 디폴트 값의 대체를 생성하는 3진 캐스트

CAST(7, 6, 32 AS DATE DEFAULT DATE '1947-10-24');

예 18. 실패하고 디폴트 값의 대체를 생성하는 6진 캐스트

CAST(2, 3, 4, 24, 6, 7.8 AS TIMESTAMP DEFAULT TIMESTAMP '1947-10-24 07:08:09');

예 19. 실패하고 예외를 발생시키는 3진 캐스트

BEGIN
  DECLARE EXIT HANDLER FOR SQLSTATE LIKE '%' BEGIN
    SET OutputRoot.XML.Data.Date.FromIntegersInvalidCast = 'Exception thrown';
     END;

  DECLARE Dummy CHARACTER CAST(7, 6, 32 AS DATE);
   END;

예 20. 실패하고 예외를 발생시키는 6진 캐스트

BEGIN
  DECLARE EXIT HANDLER FOR SQLSTATE LIKE '%' BEGIN
    SET OutputRoot.XML.Data.Timestamp.FromIntegersInvalidCast = 'Exception thrown';
     END;

  DECLARE Dummy CHARACTER CAST(2, 3, 4, 24, 6, 7.8 AS TIMESTAMP);
   END;
관련 개념
ESQL 개요
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
ak05610_