CAST 関数

CAST は複合関数で、別のデータ・タイプに 1 つ以上の値を変換します。

構文

実際には、上記のパラメーターをすべて同時に指定することはできません。例えば、CCSID 式と ENCODING パラメーターはストリング間変換のみに有効ですが、一方 FORMAT はストリングと数値の間、およびストリングと日時の間の変換 (両方向) のみに適用されます。

CAST 関数は、別のデータ・タイプに 1 つ以上の値を変換します。例えば、汎用 XML メッセージを処理するには CAST を使用できます。XML メッセージ内のすべてのフィールドには文字値があるので、特定のフィールドに対して算術計算や日時比較を実行するには、 CAST を使用してそのフィールドのストリング値を適切なタイプの値に変換してください。

サポートされていない変換もあります。 サポートされている変換のリストについては、サポートされる CASTを参照してください。

パラメーター

ソース式

CAST は、最初のパラメーター (source_expression、複数の値を指定できる) を、2 番目のパラメーター (DataType) で指定されているデータ・タイプとして戻します。 ソース式が NULL の場合は、どのような場合でも結果は NULL になります。ソース式の評価結果がターゲット・データ・タイプとの互換性がない場合、またはソース式の形式が間違っている場合は、実行時エラーが生成されます。

CCSID

CCSID パラメーターは、いずれかのストリング・データ・タイプ間の変換専用です。 CCSID パラメーターを使用して、ソースまたはターゲット・ストリングのコード・ページを指定します。

CCSID パラメーターは、評価結果が INT タイプの値になる任意の式です。 この式は、WebSphere® Message Broker の通常の CCSID の規則に従って解釈されます。有効な値のリストについては、サポートされるコード・ページを参照してください。

DataType

DataType パラメーターは、ソース値の変換後のデータ・タイプです。可能な値は以下のとおりです。
  • ストリング・タイプ:
    • BIT
    • BLOB
    • CHARACTER
  • 数値タイプ:
    • DECIMAL
    • FLOAT
    • INTEGER
  • 日時タイプ:
    • DATE
    • GMTTIME
    • GMTTIMESTAMP
    • INTERVAL
    • TIME
    • TIMESTAMP
  • ブール:
    • BOOLEAN
日時タイプの INTERVAL の後に有効な ESQL インターバル・サブタイプを指定していることを確認してください。有効な ESQL インターバル・サブタイプについては、ESQL INTERVAL データ・タイプを参照してください。有効な ESQL インターバル・サブタイプを指定する方法を示したコマンド例については、下記の例 12、13、および 14 を参照してください。

DEFAULT

DEFAULT パラメーターは、値を戻す最後の手段を提供することにより、CAST ステートメントから例外がスローされないようにします。

DEFAULT パラメーターは、DataType パラメーターで指定されているデータ・タイプと同じデータ・タイプを戻す有効な ESQL 式でなければなりません。それ以外の場合は例外がスローされます。

CCSIDENCODING、および FORMAT パラメーターは DEFAULT パラメーターの結果に適用されません。したがって、この式を含むステートメントの CCSIDENCODING、および 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 が発行されます。

数値データ・タイプとの間の変換についての詳細は、数値をストリングとしてフォーマット設定および構文解析するを参照してください。 日時データ・タイプとの間の変換についての詳細は、日時をストリングとしてフォーマット設定および構文解析するを参照してください。

この 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;
SET now = 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. FLOAT から INTERVAL への 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.XMLNS.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.XMLNS.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, 2009Copyright IBM Corporation 1999, 2009.
最終更新 : 2009-02-20 12:44:05

ak05610_