CAST ist eine komplexe Funktion, die den Datentyp eines oder mehrerer Werte umwandelt.
In der Praxis können Sie nicht alle der oben aufgeführten Parameter gleichzeitig angeben. Die Parameter CCSID und ENCODING beispielsweise gelten nur für Umsetzungen zwischen Zeichenfolgen, wogegen FORMAT nur bei Umsetzungen 'Zeichenfolge-Ziffer' und 'Zeichenfolge-Datum/Zeit' (jeweils in beide Richtungen) gilt.
Mit der Umsetzungsfunktion (CAST) wird der Datentyp eines oder mehrerer Werte umgewandelt. Sie können die CAST-Funktion beispielsweise bei der Verarbeitung generischer XML-Nachrichten verwenden. Da alle Felder in einer XML-Nachricht Zeichenwerte enthalten, ist z. B. für mathematische Berechnungen oder Datum/Zeit-Vergleiche in einem Feld die CAST-Funktion für die Umsetzung des Zeichenfolgewertes des Feldes in einen Wert des entsprechenden Typs zu verwenden.
Es werden nicht alle Konvertierungen unterstützt. Eine Liste der unterstützten Konvertierungen finden Sie unter Unterstützte Umsetzungen.
Die CAST-Funktion gibt den ersten Parameter (source_expression (Quellenausdruck)), der mehrere Werte enthalten kann, als den Datentyp zurück, der durch den zweiten Parameter (DataType (Datentyp)) angegeben wird. In allen Fällen ist das Ergebnis NULL, wenn der Quellenausdruck NULL ist. Wenn der bewertete Quellenausdruck nicht mit dem Zieldatentyp kompatibel ist oder das falsche Format hat, wird ein Laufzeitfehler generiert.
Der Parameter CCSID wird nur für Umsetzungen in oder aus einem der Zeichenfolgedatentypen verwendet. Mit dem Parameter CCSID können Sie die Codepage der Quellen- oder Zielzeichenfolge angeben.
Beim Parameter CCSID kann es sich um jeden Ausdruck handeln, dessen Auswertung einen Wert vom Typ INT ergibt. Der Ausdruck wird gemäß den normalen WebSphere Message Broker-Regeln für CCSIDs interpretiert. Eine Liste mit gültigen Werten finden Sie unter Unterstützte Codepages.
Mit dem Parameter DEFAULT kann verhindert werden, dass durch CAST-Anweisungen Ausnahmen ausgelöst werden, indem ein Wert der letzten Instanz (last-resort value) für die Rückgabe bereitgestellt wird.
Bei dem Parameter DEFAULT muss es sich um einen gültigen ESQL-Ausdruck handeln, der denselben Datentyp zurückgibt wie im Parameter DataType angegeben. Andernfalls wird eine Ausnahme ausgelöst.
Die Parameter CCSID, ENCODING und FORMAT werden nicht auf das Ergebnis des Parameters DEFAULT angewendet. Daher müssen in dem Ausdruck die korrekten Werte für CCSID, ENCODING, und FORMAT angegeben sein.
Verwenden Sie den Parameter FORMAT für Umsetzungen zwischen Zeichenfolgedatentypen und numerischen Datentypen bzw. Datum/Zeit-Datentypen. Für Umsetzungen aus Zeichenfolgetypen definiert der Parameter FORMAT, wie die Quellenzeichenfolge analysiert werden soll, um den Zieldatentyp zu füllen. Bei Umsetzungen in Zeichenfolgetypen legt der Parameter fest, wie die Daten im Quellenausdruck in der Zielzeichenfolge formatiert werden sollen.
Der Parameter FORMAT verwendet verschiedene Arten von Ausdrücken für Datum/Zeit- und numerische Umsetzungen. Der Ausdruck FORMAT kann jedoch unabhängig davon, ob die Umsetzung aus einer oder in eine Zeichenfolge erfolgt, verwendet werden.
Weitere Informationen zur Konvertierung in und aus numerischen Datentypen finden Sie im Abschnitt Zahlen als Zeichenfolge formatieren und ihre Syntax analysieren. Weitere Informationen zur Konvertierung in und aus Datum/Zeit-Datentypen sind dem Abschnitt DATETIME-Werte formatieren und ihre Syntax analysieren zu entnehmen.
Der Parameter FORMAT entspricht den in vielen anderen Produkten wie z. B. ICU und Microsoft Excel verwendeten Parametern.
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; SET now = 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.XMLNS.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.XMLNS.Data.Timestamp.FromIntegersInvalidCast = 'Ausnahme ausgelöst'; END; DECLARE Dummy CHARACTER CAST(2, 3, 4, 24, 6, 7.8 AS TIMESTAMP); END;