CAST ist eine komplexe Funktion, die den Datentyp eines oder mehrerer Werte umwandelt.
CAST wandelt einen oder mehrere Werte eines Datentyps in einen anderen Datentyp um. Sie können die CAST-Funktion beispielsweise bei der Verarbeitung generischer XML-Nachrichten verwenden. Da alle Felder in einer XML-Nachricht Zeichenwerte enthalten, gilt Folgendes, wenn Sie beispielsweise mathematische Berechnungen oder Datums-/Zeitvergleiche in einem Feld anstellen möchten: Sie müssen den Zeichenfolgewert des Felds mit Hilfe von CAST in einen Wert des entsprechenden Typs konvertieren.
Es werden nicht alle Konvertierungen unterstützt. Eine Liste der unterstützten Konvertierungen finden Sie unter Unterstützte Umsetzungen.
CAST gibt ihren ersten Parameter (Ausgangsausdruck), der mehrere Werte enthalten kann, als den Datentyp zurück, der von ihrem zweiten Parameter angegeben wird (Datentyp). In allen Fällen ist das Ergebnis NULL, wenn der Quellenausdruck NULL ist. Wenn der bewertete Quellenausdruck nicht mit dem Zieldatentyp kompatibel ist oder der Quellenausdruck das falsche Format hat, wird ein Laufzeitfehler generiert.
Die CCSID-Klausel wird nur für Konvertierungen in oder aus Zeichenfolgen verwendet. Sie ermöglicht Ihnen, die Codepage der Quelle oder der Zielzeichenfolge anzugeben.
Bei dem CCSID-Ausdruck kann es sich um jeden Ausdruck handeln, dessen Auswertung einen Wert des Typs INT ergibt. Er wird gemäß den normalen WebSphere Message Broker-Regeln für CCSIDs (ID des codierten Zeichensatzes) interpretiert.Eine Liste mit gültigen Werten finden Sie unter Unterstütze Codepages.
Die DEFAULT-Klausel verhindert das Auslösen von Ausnahmen durch CAST-Anweisungen, indem sie einen Wert der letzten Instanz (last-resort value) für die Rückgabe bereitstellt.
Der DEFAULT-Ausdruck (Standardausdruck) muss ein gültiger ESQL-Ausdruck sein, der denselben Datentyp zurückgibt wie der Datentyp, der im Parameter DataType angegeben ist. Anderenfalls wird eine Ausnahme ausgelöst.
Die Parameter CCSID, ENCODING und FORMAT gelten nicht für das Ergebnis des DEFAULT-Ausdrucks. Daher muss der Ausdruck die richtigen CCSID-, ENCODING- und FORMAT-Werte haben.
Bei Konvertierungen zwischen Zeichenfolgen und numerischen oder Datum/Zeit-Datentypen können Sie einen optionalen FORMAT-Ausdruck verwenden. Bei Konvertierungen von Zeichenfolgen bestimmt der FORMAT-Ausdruck, wie die Syntax der Quellenzeichenfolge analysiert werden soll, um den Zieldatentyp zu füllen. Bei Konvertierungen in Zeichenfolgen legt der Ausdruck fest, wie die Daten im Quellausdruck in der Zielzeichenfolge formatiert werden sollen.
Der FORMAT-Ausdruck verwendet verschiedene Arten von Ausdrücken für Datum-Zeit und numerische Konvertierungen. Sie können jedoch denselben FORMAT-Ausdruck unabhängig davon, ob von oder in eine Zeichenfolge konvertiert wird, verwenden.
Weitere Informationen zum Konvertieren von und in numerische Datentypen finden Sie unter Zahlen als Zeichenfolge formatieren und ihre Syntax analysieren. Weitere Informationen zum Konvertieren von und in Datum/Zeit-Datentypen finden Sie unter DATETIME-Werte formatieren und ihre Syntax analysieren.
Der FORMAT-Ausdruck entspricht den in vielen anderen Produkten wie z. B. ICU und Microsoft Excel verwendeten Ausdrücken.
DECLARE source DECIMAL 31415.92653589; DECLARE target CHARACTER; DECLARE pattern CHARACTER '#,##0.00'; SET target = CAST(source AS CHARACTER FORMAT pattern); -- Ziel ist jetzt "31,415.93"
DECLARE now CHARACTER = CAST(CURRENT_TIMESTAMP AS CHARACTER FORMAT "yyyyMMdd-HHmmss"); -- Ziel ist jetzt "20041007-111656" (zumindest in dieser Instanz)
DECLARE source CHARACTER '01-02-03'; DECLARE target DATE; DECLARE pattern CHARACTER 'dd-MM-yy'; SET target = CAST(source AS DATE FORMAT pattern); -- Ziel enthält jetzt 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); -- Ziel enthält jetzt Year=2003, Month=01, Day=03, Hour=15, Minute=45, Seconds=58 -- (Sekunden stammen aus CURRENT_TIME, da sie in der Eingabe nicht vorhanden sind)
DECLARE source DECIMAL -54231.122; DECLARE target CHARACTER; DECLARE pattern CHARACTER '#,##0.00;(#,##0.00)'; SET target = CAST(source AS CHARACTER FORMAT pattern); -- Ziel ist jetzt "£(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); -- Ziel enthält jetzt 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 = 'Ausnahme ausgelöst'; 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 = 'Ausnahme ausgelöst'; END; DECLARE Dummy CHARACTER CAST(2, 3, 4, 24, 6, 7.8 AS TIMESTAMP); END;