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 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 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.