CAST は複合関数で、別のデータ・タイプに 1 つ以上の値を変換します。
CAST は、別のデータ・タイプに 1 つ以上の値を変換します。例えば、汎用 XML メッセージを処理するには CAST を使用できます。XML メッセージ内のすべてのフィールドには文字値があるので、例えば、算術計算や日時比較を実行したい場合には、CAST を使用してそのフィールドのストリング値を適切なタイプの値に変換できます。
サポートされていない変換もあります。 サポートされている変換のリストについては、サポートされる CASTを参照してください。
CAST は、最初のパラメーター (source_expression、複数の値を指定できる) を、2 番目のパラメーター (DataType) で指定されているデータ・タイプとして戻します。ソース式が NULL の場合は、どのような場合でも結果は NULL になります。ソース式の評価結果がターゲット・データ・タイプとの互換性がない場合、またはソース式の形式が間違っている場合は、実行時エラーが生成されます。
CCSID 文節は、いずれかのストリング・データ・タイプ間の変換専用です。この文節を使用して、ソースまたはターゲット・ストリングのコード・ページを指定できます。
CCSID 式は、評価結果が INT タイプの値になる任意の式です。これは、WebSphere Message Broker の通常の CCSID の規則に従って解釈されます。有効な値のリストについては、サポートされるコード・ページを参照してください。
DEFAULT 文節は、値を戻す最後の手段を提供することにより、CAST ステートメントから例外がスローされないようにします。
DEFAULT expression は、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 = 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 '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.XML.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.XML.Data.Timestamp.FromIntegersInvalidCast = 'Exception thrown'; END; DECLARE Dummy CHARACTER CAST(2, 3, 4, 24, 6, 7.8 AS TIMESTAMP); END;