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
| Wert | Beschreibung |
| 0 | Maximal sechs Ziffern, zunächst als Dezimalzahl, bei größeren/kleineren Werten wissenschaftlich |
| 1 | immer acht Ziffern, immer wissenschaftlich. Die Zeichenkette muß mindestens 15 Zeichen lang sein.
|
| 2 | immer 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
| Wert | Beschreibung |
| 0 | Keine Tausendertrennzeichen, zwei Nachkommastellen |
| 1 | Tausendertrennzeichen und zwei Nachkommastellen |
| 2 | keine 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.50003. DateTime
Jahrhundert 2-stellig | Jahrhundert 4-stellig | Bezeichnung | Darstellung |
|---|
| - | 0 oder 100 (*) | Standard | mon dd yyyy hh:miAM (oder PM) |
| 1 | 101 | USA | mm/dd/yy |
| 2 | 102 | ANSI | yy.mm.dd |
| 3 | 103 | Britisch/Französisch | dd/mm/yy |
| 4 | 104 | Deutsch | dd.mm.yy |
| 5 | 105 | Italienisch | dd-mm-yy |
| 6 | 106 | - | dd mon yy |
| 7 | 107 | - | Mon dd, yy |
| 8 | 108 | - | hh:mm:ss |
| - | 9 oder 109 (*) | Standardwert + Millisekunden | mon dd yyyy hh:mi:ss:mmmAM (oder PM) |
| 10 | 110 | USA | mm-dd-yy |
| 11 | 111 | JAPAN | yy/mm/dd |
| 12 | 112 | ISO | yymmdd |
| - | 13 oder 113 (*) | Europ. Standard + Millisekunden | dd mon yyyy hh:mm:ss:mmm(24h) |
| 14 | 114 | - | hh:mi:ss:mmm(24h) |
| - | 20 oder 120 (*) | ODBC kanonisch | yyyy-mm-dd hh:mi:ss(24h) |
| - | 21 oder 121 (*) | ODBC kanonisch (mit Millisekunden) | yyyy-mm-dd hh:mi:ss.mmm(24h) |
| - | 126(***) | ISO8601 | yyyy-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.
© 2003-2009 Jürgen Auer, Berlin.