CAST 関数

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

構文

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

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

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

パラメーター

ソース式

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

CCSID

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

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

DataType

DataType は、ソース値の変換後のデータ・タイプです。可能な値は以下のとおりです。
  • ストリング・タイプ:
    • BIT
    • BLOB
    • CHARACTER
  • 数値タイプ:
    • DECIMAL
    • FLOAT
    • INTEGER
  • 日時タイプ:
    • DATE
    • GMTTIME
    • GMTTIMESTAMP
    • INTERVAL
    • TIME
    • TIMESTAMP
  • ブール:
    • BOOLEAN

DEFAULT

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

DEFAULT expression は、DataType パラメーターで指定されているデータ・タイプと同じデータ・タイプを戻す有効な 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 が発行されます。

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

この 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. 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.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 最終更新: 08/21/2006
ak05610_