CAST は複合関数で、別のデータ・タイプに 1 つ以上の値を変換します。
.-<< , <<------------. V | >>-CAST--(----source_expression -+-- AS--DataType---------------> >--+-------------------+--+----------------------+--------------> '-CCSID--expression-' '-ENCODING--expression-' >--+--------------------+--+---------------------+--)---------->< '-FORMAT--expression-' '-DEFAULT--expression-'
実際には、上記のパラメーターをすべて同時に指定することはできません。 例えば、CCSID 式と ENCODING パラメーターはストリング間変換のみに有効ですが、一方 FORMAT はストリングと数値の間、およびストリングと日時の間の変換 (両方向) のみに適用されます。
サポートされていない変換もあります。 サポートされている変換のリストについては、サポートされる CASTを参照してください。
CAST は、最初のパラメーター (source_expression、複数の値を指定できる) を、2 番目のパラメーター (DataType) で指定されているデータ・タイプとして戻します。 ソース式が NULL の場合は、どのような場合でも結果は NULL になります。ソース式の評価結果がターゲット・データ・タイプとの互換性がない場合、またはソース式の形式が間違っている場合は、実行時エラーが生成されます。
CCSID パラメーターは、いずれかのストリング・データ・タイプ間の変換専用です。 CCSID パラメーターを使用して、ソースまたはターゲット・ストリングのコード・ページを指定します。
CCSID パラメーターは、評価結果が INT タイプの値になる任意の式です。 この式は、WebSphere® Message Broker の通常の CCSID の規則に従って解釈されます。有効な値のリストについては、サポートされるコード・ページを参照してください。
DEFAULT パラメーターは、値を戻す最後の手段を提供することにより、CAST ステートメントから例外がスローされないようにします。
DEFAULT パラメーターは、DataType パラメーターで指定されているのと同じデータ・タイプを戻す有効な ESQL 式でなければなりません。そうでない場合は、例外がスローされます。
CCSID、ENCODING、および FORMAT パラメーターは DEFAULT パラメーターの結果に適用されません。したがって、この式を含むステートメントの CCSID、ENCODING、および FORMAT が正しくなければなりません。
ストリング・データ・タイプと数値または日時データ・タイプの間の変換には、FORMAT パラメーターを使用してください。 ストリング・タイプから の変換の場合、FORMAT は、ソース・ストリングがターゲット・データ・タイプを満たすように構文解析される方法を定義します。 ストリング・タイプへの 変換の場合、ソース式のデータがターゲット・ストリングにフォーマット設定される方法を定義します。
FORMAT では、日時や数値の変換にさまざまなタイプの式が使用されます。 しかし、ストリングへの変換かストリングからの変換かにかかわらず、同じ FORMAT 式を使用できます。
数値データ・タイプとの間の変換についての詳細は、数値をストリングとしてフォーマット設定および構文解析するを参照してください。 日時データ・タイプとの間の変換についての詳細は、日時をストリングとしてフォーマット設定および構文解析するを参照してください。
この FORMAT パラメーターは、ICU や Microsoft Excel などの他の多くの製品で使用されているパラメーターと同等です。
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'
DECLARE now CHARACTER;
SET now = CAST(CURRENT_TIMESTAMP AS CHARACTER FORMAT 'yyyyMMdd-HHmmss');
-- target is now '20041007-111656' (in this instance at least)
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
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)
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)'
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
CAST(7, 6, 5 AS DATE);
CAST(7.4e0, 6.5e0, 5.6e0 AS DATE);
CAST(7.6, 6.51, 5.4 AS DATE);
CAST(9, 8, 7 AS TIME);
CAST(9.4e0, 8.6e0, 7.1234567e0 AS TIME);
CAST(9.6, 8.4, 7.7654321 AS TIME);
CAST(DATE '0001-02-03', TIME '04:05:06' AS TIMESTAMP);
CAST(2, 3, 4, 5, 6, 7.8 AS TIMESTAMP);
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);
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);
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);
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);
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);
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);
CAST(7, 6, 32 AS DATE DEFAULT DATE '1947-10-24');
CAST(2, 3, 4, 24, 6, 7.8 AS TIMESTAMP DEFAULT TIMESTAMP '1947-10-24 07:08:09');
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;
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;