Cast / Convert für explizite Konvertierungen

Zwei Funktionen zum expliziten Konvertieren eines Ausdrucks in einen anderen Ausdruck. Beide Funktionen haben eine ähnliche Wirkung.

Syntax

Cast

Cast(<Ausdruck> As <Datentyp>[(<Länge des Datentyps>)])

Convert

Convert(<Datentyp> [(<Länge des Datentyps>)], <Ausdruck> [, <Stil>])

Argumente

<Ausdruck>
der zu konvertierende Ausdruck eines beliebigen Datentyps
<Datentyp> [(<Länge des Datentyps>)]
der Zieldatentyp, in welchen der Ausdruck konvertiert werden soll. Falls es sich um einen Datentyp mit einer Längenangabe handelt, so wird diese in Klammern notiert (varchar(50)).
<Stil>
In Abhängigkeit vom Datentyp erzeugt der Parameter bei der Konvertierung in eine Textdarstellung verschiedene, vordefinierte Formate gemäß der folgenden drei Tabellen:
1. Float/Real
WertBeschreibung
0Maximal sechs Ziffern, zunächst als Dezimalzahl, bei größeren/kleineren Werten wissenschaftlich
1immer acht Ziffern, immer wissenschaftlich. Die Zeichenkette muß mindestens 15 Zeichen lang sein.
2immer sechzehn Ziffern und wissenschaftlich. Die Zeichenkette muß minimal 23 Zeichen bereitstellen.

Convert(nvarchar(15), -3.5e0, 2) = -3.5000000e+000
Convert(nvarchar(23), 3.5e0, 2) = -3.500000000000000e+000

Wenn die Länge die Zeichenkette unter den angegebenen Minimalwerten 15/23 liegen, wird ein Laufzeitfehler erzeugt.

2. Money
WertBeschreibung
0Keine Tausendertrennzeichen, zwei Nachkommastellen
1Tausendertrennzeichen und zwei Nachkommastellen
2keine Tausendertrennzeichen, vier Nachkommastellen

Convert(nvarchar(20), $2730.50, 0) = 2730.50
Convert(nvarchar(20), $2730.50, 1) = 2,730.50
Convert(nvarchar(20), $2730.50, 2) = 2730.5000

3. DateTime
Jahrhundert
2-stellig
Jahrhundert 4-stelligBezeichnungDarstellung
-0 oder 100 (*)Standardmon dd yyyy hh:miAM (oder PM)
1101USAmm/dd/yy
2102ANSIyy.mm.dd
3103Britisch/Französischdd/mm/yy
4104Deutschdd.mm.yy
5105Italienischdd-mm-yy
6106-dd mon yy
7107-Mon dd, yy
8108-hh:mm:ss
-9 oder 109 (*)Standardwert + Millisekundenmon dd yyyy hh:mi:ss:mmmAM (oder PM)
10110USAmm-dd-yy
11111JAPANyy/mm/dd
12112ISOyymmdd
-13 oder 113 (*)Europ. Standard + Millisekundendd mon yyyy hh:mm:ss:mmm(24h)
14114-hh:mi:ss:mmm(24h)
-20 oder 120 (*)ODBC kanonischyyyy-mm-dd hh:mi:ss(24h)
-21 oder 121 (*)ODBC kanonisch (mit Millisekunden)yyyy-mm-dd hh:mi:ss.mmm(24h)
-126(***)ISO8601yyyy-mm-dd Thh:mm:ss.mmm(keine Leerzeichen)
-130*Hijri****dd mon yyyy hh:mi:ss:mmmAM
-131*Hijri****dd/mm/yy hh:mi:ss:mmmAM

Beispiele

1. Bei der Konvertierung in Zeichenketten erstellen beide Funktionen minimale Zeichenfolgen ohne eingefügte Leerzeichen. Dies ist ein Unterschied zur Str -Funktion, welche führende Leerzeichen bis zur Gesamtlänge einfügt:

Select 1 As [pos], 'a' + Cast(5 as nvarchar(10)) + 'b' As [Text],
Len('a' + Cast(5 as nvarchar(10)) + 'b') As [Länge]
Union
Select 2, 'a' + Str(5) + 'b', Len('a' + Str(5) + 'b')
Order By Pos

Ausgabe:

 pos         Text         Länge
 ----------- ------------ -----------
           1 a5b                    3
           2 a         5b          12

2. Erstellen einer abgeschnittenen Zeichenfolge: Sind in einem Feld bsp. 100 Zeichen zugelassen, sollen jedoch maximal 50 Zeichen ausgegeben werden, so kann anstelle der Left -Funktion Cast genutzt werden:

Select Cast(A.KundenInfo as nvarchar(50)) From Kunden

3. Verwendung, um eine Zeichenfolge und eine Zahl bereits innerhalb einer Abfrage zu verketten. Hier ist eine Konvertierung zwingend, da ansonsten versucht wird, die nicht numerische Spalte in eine numerische Spalte zu konvertieren.

Select V.V_Name + ' (' + Cast(V.V_Prov * 100 as nvarchar(5)) + '%)'
From Vertreter As V

erzeugt eine Ausgabe:

Schulze, Fritz (7.00%)
Meier, Franz (5.00%)
Meyer, Emil (6.00%)

Hinweise

Im Rahmen komplexer gespeicherter Prozeduren, welche dynamischen Code erzeugen, sind diese Funktionen unverzichtbar. Für Abfragen innerhalb von server-daten kann auf beide Funktionen verzichtet werden, falls Datums- und numerische Daten ausschließlich durch sd-Elemente festgelegt werden. Die Convert-Funktion erlaubt die Ausgabe einer dateTime-Spalte in einem vom Leser unabhängigen Format. Zu beachten ist allerdings, daß in diesem Fall Textdaten ausgeliefert werden, so daß die Formatierungsmöglichkeiten mit den sd:datetime-format - und sd:number-format -Attributen nicht mehr zur Verfügung stehen.


Kontaktformular:

Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!

Die Erläuterungen zum Datenschutz habe ich gelesen und stimme diesen zu.

© 2003-2019 Jürgen Auer, Berlin.