CAST-Funktion

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

SYNTAX

Anmerkung: In der Praxis können Sie nicht alle der oben aufgeführten Parameter gleichzeitig angeben. Die Ausdrücke CCSID und ENCODING beispielsweise gelten nur für Umsetzungen zwischen Zeichenfolgen, während der FORMAT-Ausdruck nur bei Umwandlungen zwischen Zeichenfolge-Ziffer und Zeichenfolge-Datumzeit (jeweils in beide Richtungen) gilt.

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.

Parameters

Quellenausdruck

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.

ID des codierten Zeichensatzes (CCSID)

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.

Datentyp

'Datentyp" ist der Datentyp, in den der Quellwert konvertiert wird. Folgende Werte sind gültig:
  • Zeichenfolgetypen:
    • BIT
    • BLOB
    • CHARACTER
  • Numerische Typen:
    • DECIMAL
    • FLOAT (Gleitkommazahl)
    • INTEGER (Ganze Zahl)
  • Datum/Zeittypen:
    • DATE
    • GMTTIME
    • GMTTIMESTAMP
    • INTERVAL
    • TIME
    • TIMESTAMP
  • Boolesch:
    • BOOLEAN

DEFAULT

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.

ENCODING

Mit Hilfe der ENCODING-Klausel können Sie die Codierung angeben. Sie wird nur für bestimmte Umsetzungen verwendet. Bei dem ENCODING-Wert 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 Codierungen interpretiert. 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

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.

Bei der Umsetzung folgender Datentypen können Sie einen FORMAT-Ausdruck angeben:
  • Von allen Zeichenfolgetypen (BIT, BLOB oder CHARACTER) nach:
    • DECIMAL
    • FLOAT (Gleitkommazahl)
    • INTEGER (Ganze Zahl)
    • DATE
    • GMTTIMESTAMP
    • TIMESTAMP
    • GMTTIME
    • TIME
  • In alle Zeichenfolgetypen (BIT, BLOB oder CHARACTER) von allen numerischen und Datum/Zeit-Datentypen, die im vorherigen Punkt aufgeführt wurden.
Wenn Sie einen FORMAT-Ausdruck für eine nicht unterstützte Kombination aus Quell- und Zieldatentypen angeben, wird die Fehlernachricht BIP3205 ausgegeben.

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.

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

DECLARE now CHARACTER = CAST(CURRENT_TIMESTAMP AS CHARACTER FORMAT "yyyyMMdd-HHmmss");
-- Ziel ist jetzt "20041007-111656" (zumindest in dieser Instanz)

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.XML.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.XML.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 | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ak05610_