Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

CAST-Ausdruck

Der CAST-Ausdruck wandelt einen Wert eines bestimmtem Datentyps in einen Wert eines anderen Datentyps um.


cast_ausdruck ::= CAST ({ ausdruck | NULL } AS datentyp )



ausdruck / NULL

CAST-Operand. Er enthält das Schlüsselwort NULL oder einen Ausdruck ausdruck. Der Wert von ausdruck darf kein multipler Wert mit Dimension > 1 sein.


datentyp

Zieldatentyp für das Ergebnis des CAST-Ausdrucks.
Der Zieldatentyp datentyp darf keine Dimension für eine multiple Spalte enthalten.


Ergebnis


Das Ergebnis des CAST-Ausdrucks ist ein atomarer Wert des Zieldatentyps datentyp. Welcher Wert zurückgeliefert wird, ist einerseits abhängig vom Wert des CAST-Operanden, andererseits von dessen Datentyp.

Ergibt ausdruck den NULL-Wert oder enthält der CAST-Operand das Schlüsselwort NULL, so ist das Ergebnis des CAST-Ausdrucks der NULL-Wert.

Sonst gelten die Regeln für die Konvertierung eines Wertes in einen anderen Datentyp, die ab "CAST-Ausdruck" beschrieben sind.

Kombinationsmöglichkeiten von Ausgangs- und Zieldatentyp

Der Datentyp von ausdruck, hier Ausgangsdatentyp genannt, ist nur mit bestimmten Zieldatentypen kombinierbar. Tabelle 23 zeigt, welche Ausgangsdatentypen Sie mit welchen Zieldatentypen kombinieren dürfen und welche Kombinationen nicht zugelassen sind



Zieldaten-typ

Zieldaten-typ

Zieldaten-typ

Ziel-daten-typ

Ziel-daten-typ

Ziel-daten-typ

Zieldaten-typ



INTEGER

SMALLINT

DECIMAL

NUMERIC

REAL

DOUBLE
PRECISION

FLOAT

CHAR

VAR-CHAR

NCHAR

NVAR-CHAR

DATE

TIME(3)

TIME-STAMP(3)

Aus-gangs-daten-typ

INTEGER

SMALLINT

DECIMAL

NUMERIC

ja

ja

ja

ja

nein

nein

nein

Aus-gangs-daten-typ


REAL

DOUBLE
PRECISION

FLOAT

ja

ja

ja

ja

nein

nein

nein

Aus-gangs-daten-typ

CHAR

VARCHAR

ja

ja

ja

nein

ja

ja

ja

Aus-gangs-daten-typ


NCHAR

NVAR-CHAR

ja

ja

nein

ja

ja

ja

ja

Aus-gangs-daten-typ

DATE

nein

nein

ja

ja

ja

nein

ja

Aus-gangs-daten-typ

TIME(3)

nein

nein

ja

ja

nein

ja

ja

Aus-gangs-daten-typ


TIME-STAMP(3)

nein

nein

ja

ja

ja

ja

ja

Tabelle 23: Zulässige und verbotene Kombinationen von Ausgangs- und Zieldatentyp beim CAST-Ausdruck

Regeln für die Konvertierung eines Wertes in einen anderen Datentyp

Neben den erlaubten Kombinationsmöglichkeiten von Ausgangs- und Zieldatentyp (siehe Tabelle 23), gelten bei der Konvertierung eines Wertes in einen anderen Datentyp weitere Regeln, die im Folgenden beschrieben sind. Abhängig vom Zieldatentyp, ist die Beschreibung in drei Gruppen eingeteilt:

  • Zieldatentyp ist ein Datentyp für Ganz-, Festpunkt- oder Gleitpunktzahlen

  • Zieldatentyp ist ein Datentyp für Zeichenketten fester oder variabler Länge

  • Zieldatentyp ist ein Zeit-Datentyp


Zieldatentyp ist ein Datentyp für Ganz-, Festpunkt- oder Gleitpunktzahlen

  • Numerische Werte werden gerundet, wenn ihre Nachkommastellenzahl für den Zieldatentyp zu groß ist. Ist der Betrag des numerischen Wertes für den Zieldatentyp zu groß, erhalten Sie eine Fehlermeldung.

    Beispiele

    CAST (4502.9267 AS DECIMAL(6,2))

    Der Wert 4502.9267 wird auf den Wert 4502.93 gerundet.

    CAST (-115.05 AS DECIMAL(2,0))

    Der Wert -115.05 wird auf den Wert -115 gerundet. Da aber der Betrag des Wertes für den Zieldatentyp zu groß ist, erfolgt eine Fehlermeldung.

    CAST (2450.43 AS REAL)

    Der Wert 2450.43 wird als Gleitpunktzahl des Wertes 2.45043E3 dargestellt.

  • Alphanumerische Werte und National-Werte müssen ohne Wertverlust als Wert des zugewiesenen Zieldatentyps darstellbar sein. Führende oder nachfolgende Leerzeichen werden entfernt.

    Beispiele

    CAST ('512 ' AS SMALLINT) / CAST (N'512 ' AS SMALLINT)

    Das Leerzeichen am Ende der Zeichenkette wird entfernt. Die Zeichenkette '512' wird als kleine Ganzzahl 512 dargestellt.

    CAST ('sum' AS NUMERIC)

    Das ist ein Fehler: Die Zeichenkette 'sum' ist nicht als numerischer Wert darstellbar, da numerische Literale nur Ziffern enthalten dürfen.

    CAST ('255' AS REAL) / CAST (N'255' AS REAL)
    Die Leerzeichen am Ende der Zeichenkette werden entfernt und die Zeichenkette '255' wird als Gleitpunktzahl 2.55000E2 dargestellt.


Zieldatentyp ist ein Datentyp für Zeichenketten fester oder variabler Länge

  • Numerische Werte des Datentyps Ganzzahl, Festpunktzahl oder Gleitpunktzahl müssen ohne Wertverlust als Zeichenkette fester bzw. variabler Länge darstellbar sein. Werte des Datentyps Gleitpunktzahl müssen zudem in der normierten Form einer Gleitpunktzahl darstellbar sein, wenn ihr Wert ungleich 0 ist, sonst in der Form 0E 0. Für alle numerischen Werte gilt: Ist die Länge des Werts kleiner als die feste Länge des Zieldatentyps CHAR oder NCHAR, wird der Wert am Ende mit Leerzeichen ergänzt; ist die Länge des Werts kleiner als die maximale Länge des Zieldatentyps VARCHAR oder NVARCHAR, wird sie beibehalten. Ist die Länge des Werts größer als die feste bzw. maximale Länge des Zieldatentyps, erhalten Sie eine Fehlermeldung.

    Beispiele

    CAST (1234 AS CHAR(5)) / CAST (1234 AS NCHAR(5))

    Der Wert der Ganzzahl 1234 ergibt die alphanumerische Zeichenkette '1234 ' bzw. die National-Zeichenkette N'1234 '.

    CAST (25.95 AS VARCHAR(5)) / CAST (25.95 AS NVARCHAR(5))

    Der Wert der Festpunktzahl 25.95 ergibt die alphanumerische Zeichenkette '25.95' bzw. die National-Zeichenkette N'25.95'.

    CAST (45.5E2 AS CHAR(7)) / CAST (45.5E2 AS NCHAR(7))

    Der Wert der Gleitpunktzahl 45.5E2 ergibt die alphanumerische Zeichenkette '4.55E3 ' bzw. die National-Zeichenkette N'4.55E3 '.

  • Alphanumerische Werte und National-Werte werden am Ende mit Leerzeichen ergänzt, wenn ihre Länge kleiner als die feste Länge des Zieldatentyps CHAR oder NCHAR ist. Ist die Länge des Werts kleiner als die maximale Länge des Zieldatentyps VARCHAR oder NVARCHAR, wird sie beibehalten. Ist die Länge des Wertes größer als die feste bzw. maximale Länge des Zieldatentyps, wird der Wert am Ende auf die Länge des Zieldatentyps gekürzt. Werden Zeichen entfernt, die keine Leerzeichen sind, erhalten Sie eine Warnung.

    Beispiele

    CAST ('Wochenende' AS CHAR(5)) / CAST (N'Wochenende' AS NCHAR(5))

    Die Zeichenkette 'Wochenende' ist für den Datentyp CHAR(5) bzw. NCHAR(5) zu lang. Sie wird am Ende auf die Länge der Ziel-Zeichenkette, also 'Woche', gekürzt und SESAM/SQL gibt eine Warnung aus.

    CAST ('Woche' AS VARCHAR(15)) / CAST (N'Woche' AS NVARCHAR(15))

    Ergebnis ist die alphanumerische Zeichenkette 'Woche' bzw. die National-Zeichenkette N'Woche'. Die Zeichenkette wird nicht am Ende bis zur maximalen Länge von 15 Zeichen aufgefüllt.

  • Zeitwerte müssen als Zeichenkette darstellbar sein. Ist die Länge des Zeitwerts kleiner als die feste Länge des Zieldatentyps CHAR oder NCHAR, so wird der Wert am Ende mit Leerzeichen ergänzt. Ist die Länge des Zeitwerts kleiner als die maximale Länge des Zieldatentyps VARCHAR oder NVARCHAR, wird sie beibehalten. Ist sie größer als die feste bzw. variable Länge des Zieldatentyps, erhalten Sie eine Fehlermeldung.

    Beispiele

    CAST (DATE'2013-08-11' AS VARCHAR(20))

    CAST (DATE'2013-08-11' AS NVARCHAR(20))

    Ergebnis ist die alphanumerische Zeichenkette '2013-08-11' bzw. die National-Zeichenkette N'2013-08-11'.

    CAST (DATE'2013-08-11' AS VARCHAR(5))

    Der Zeitwert ist für eine Zeichenkette mit der maximalen variablen Länge 5 zu lang. Der Zeitwert wird nicht konvertiert und es erfolgt eine Fehlermeldung.


Zieldatentyp ist ein Zeit-Datentyp

  • Alphanumerische Werte und National-Werte müssen ohne Wertverlust als Wert des zugewiesenen Zieldatentyps darstellbar sein. Führende oder nachfolgende Leerzeichen werden entfernt.

    Beispiele

    CAST ('2013-08-11' AS DATE)

    CAST (N'2013-08-11' AS DATE)

    Das führende Leerzeichen der Zeichenkette wird entfernt und die Zeichenkette wird in den Datentyp DATE konvertiert.

    CAST ('2013-08-11 17:57:35:000' AS TIMESTAMP(3))

    Das ist ein Fehler: Die Zeichenkette ist nicht als Zeitstempel darstellbar. Das Trennzeichen zwischen den Komponenten Sekunde und Sekundenbruchteile bei Zeitstempel-Werten muss ein Punkt „.“ sein.

  • Bei der Konvertierung von Zeitwerten gelten folgende Regeln:
    • Ist der Zieldatentyp DATE und der Ausgangsdatentyp TIMESTAMP, enthält der Ergebniswert die Datumsangabe (Jahr-Monat-Tag) des Ausgangswertes.

    • Ist der Zieldatentyp DATE und der Ausgangsdatentyp TIME, erhalten Sie eine Fehlermeldung.

    • Ist der Zieldatentyp TIME und der Ausgangsdatentyp TIMESTAMP, enthält der Ergebniswert die Uhrzeit (Stunde:Minute:Sekunde) des Ausgangswertes.

    • Ist der Zieldatentyp TIME und der Ausgangsdatentyp DATE, erhalten Sie eine Fehlermeldung.

    • Ist der Zieldatentyp TIMESTAMP und der Ausgangsdatentyp DATE, enthält der Ergebniswert die Datumsangabe Jahr-Monat-Tag des Ausgangswertes und die auf 0 gesetzten Felder Stunde:Minute:Sekunde für die Uhrzeit.

    • Ist der Zieldatentyp TIMESTAMP und der Ausgangsdatentyp TIME, enthält der Ergebniswert die Datumsangabe Jahr-Monat-Tag des aktuellen Datums (CURRENT_DATE) und die Uhrzeit Stunde:Minute:Sekunde des Ausgangswertes.

    Beispiele

    CAST (TIMESTAMP '2013-08-11 17:57:35.000' AS DATE)

    Ergebniswert ist das Datum '2013-08-11' .


    SELECT atext, CAST (fertigist AS TIMESTAMP(3)) 
       FROM auftrag WHERE knr=106
       atext                         fertigist
       Kunden-Verwaltung             <date>     00:00:00.000
       Datenbank-Entwurf Kunden      <date>     00:00:00.000
    

    Die Ergebnistabelle enthält die Spalte FERTIGIST mit dem Datentyp TIMESTAMP. Die Zeitstempel-Felder für die Uhrzeit sind auf 0 gesetzt.