CAST-Funktion

CAST ist eine komplexe Funktion, die den Datentyp eines oder mehrerer Werte umwandelt.

SYNTAX

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.

Parameters

Source expression (Quellenausdruck)

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.

CCSID

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.

Datentyp

Bei dem Parameter DataType handelt es sich um den Datentyp, in den der Quellenwert umgewandelt wird. Folgende Werte sind gültig:
  • Zeichenfolgetypen:
    • BIT
    • BLOB
    • CHARACTER
  • Numerische Typen:
    • DECIMAL
    • FLOAT (Gleitkommazahl)
    • INTEGER (Ganze Zahl)
  • Datum/Zeit-Typen:
    • DATE
    • GMTTIME
    • GMTTIMESTAMP
    • INTERVAL
    • TIME
    • TIMESTAMP
  • Boolesch:
    • BOOLEAN
Achten Sie darauf, dass Sie einen gültigen ESQL-Intervallsubtyp nach dem Datum/Zeit-Typ INTERVAL angeben. Informationen zu gültigen ESQL-Intervallsubtypen finden Sie im Abschnitt ESQL-Datentyp INTERVAL. In den nachfolgenden Beispielen 12, 13 und 14 finden Sie Musterbefehle für die Angabe eines gültigen ESQL-Intervallsubtyps.

DEFAULT (Standard)

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.

ENCODING

Verwenden Sie den Parameter ENCODING zur Angabe der Codierung für bestimmte Umsetzungen. Als Wert für den Parameter ENCODING kommt jeder Ausdruck in Frage, dessen Auswertung einen Wert vom Typ INT ergibt und der nach den normalen WebSphere Message Broker-Regeln für die Codierung interpretiert wird. Gültige Werte sind:
  • 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

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.

Bei der expliziten Typumwandlung kann ein Parameter FORMAT angegeben werden:
  • Aus einem der Zeichenfolgedatentypen (BIT, BLOB oder CHARACTER) in:
    • DECIMAL
    • FLOAT (Gleitkommazahl)
    • INTEGER (Ganze Zahl)
    • DATE
    • GMTTIMESTAMP
    • TIMESTAMP
    • GMTTIME
    • TIME
  • In eine der Zeichenfolgedatentypen (BIT, BLOB oder CHARACTER) aus einem der numerischen Datentypen und der Datum/Zeit-Datentypen aus der vorherigen Liste.
Wenn der Parameter FORMAT für eine nicht unterstützte Kombination aus Quellen- und Zieldatentypen angegeben wird, kommt es zur Ausgabe der Fehlernachricht BIP3205.

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.

Beispiele

Beispiel 1. Formatierte UMSETZUNG von DECIMAL in CHARACTER

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'

Beispiel 2. Formatierte UMSETZUNG von DATE in CHARACTER

Beginn der Änderung
DECLARE now CHARACTER;
SET now = CAST(CURRENT_TIMESTAMP AS CHARACTER FORMAT 'yyyyMMdd-HHmmss');
-- Ziel ist jetzt '20041007-111656' (zumindest in dieser Instanz)
Ende der Änderung

Beispiel 3. Formatierte UMSETZUNG von CHARACTER in DATE

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

Beispiel 4. Formatierte UMSETZUNG von CHARACTER in TIMESTAMP

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)

Beispiel 5. Formatierte UMSETZUNG von DECIMAL in CHARACTER, mit negativem Muster

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)'

Beispiel 6. Formatierte UMSETZUNG von CHARACTER in TIME

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

Beispiel 7. UMSETZUNGEN von numerischen Typen in DATE

CAST(7, 6, 5 AS DATE);
CAST(7.4e0, 6.5e0, 5.6e0 AS DATE);
CAST(7.6, 6.51, 5.4 AS DATE);

Beispiel 8. UMSETZUNGEN von numerischen Typen in TIME

CAST(9, 8, 7 AS TIME);
CAST(9.4e0, 8.6e0, 7.1234567e0 AS TIME);
CAST(9.6, 8.4, 7.7654321 AS TIME);

Beispiel 9. UMSETZUNGEN von numerischen Typen in GMTTIME

CAST(DATE '0001-02-03', TIME '04:05:06' AS TIMESTAMP);
CAST(2, 3, 4, 5, 6, 7.8 AS TIMESTAMP);

Beispiel 10. UMSETZUNGEN in TIMESTAMP

CAST(DATE '0001-02-03', TIME '04:05:06' AS TIMESTAMP);
CAST(2, 3, 4, 5, 6, 7.8 AS TIMESTAMP);

Beispiel 11. UMSETZUNGEN in GMTTIMESTAMP

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);

Beispiel 12. UMSETZUNGEN in INTERVAL aus INTEGER

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);

Beispiel 13. UMWANDLUNGEN von INTERVAL in FLOAT

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);

Beispiel 14. UMWANDLUNGEN von INTERVAL in DECIMAL

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);

Beispiel 15. UMWANDLUNGEN in FLOAT aus INTERVAL

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);

Beispiel 16. UMWANDLUNGEN in DECIMAL aus INTERVAL

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);

Beispiel 17. Eine ternäre Umsetzung, die fehlschlägt und zum Ersatz eines Standardwertes führt

CAST(7, 6, 32 AS DATE DEFAULT DATE '1947-10-24');

Beispiel 18. Eine sechsfache Umsetzung, die fehlschlägt und zum Ersatz eines Standardwertes führt

CAST(2, 3, 4, 24, 6, 7.8 AS TIMESTAMP DEFAULT TIMESTAMP '1947-10-24 07:08:09');

Beispiel 19. Eine ternäre Umsetzung, die fehlschlägt und eine Ausnahme auslöst

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;

Beispiel 20. Eine sechsfache Umsetzung, die fehlschlägt und eine Ausnahme auslöst

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;
Zugehörige Konzepte
Übersicht zu ESQL
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Feedback

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Letzte Aktualisierung : 2009-02-17 15:29:30

ak05610_