CONVERT liefert Sternchen (Asterisk *)
Wenn man versucht einen Text, der keine gültige Zahl darstellt, in eine Zahl zu konvertieren, gibt es einen Laufzeitfehler; ist klar.
SELECT CONVERT(int, 'Text') AS Try Meldung 245, Ebene 16, Status 1, Zeile 1 Fehler beim Konvertieren des varchar-Wertes 'Text' in den int-Datentyp.
Wie sieht es mit der „Gegenrichtung“ aus, kann man nach belieben nach VarChar konvertieren, sofern der Datentyp + CONVERT es prinzipiell unterstützt?
Datum ist jedenfalls kein Problem, auch wenn ich das Ergebnis mit VarChar auf 3 Zeichen begrenze; bekomme ich halt den Tag und den ersten Punkt zurück.
SELECT CONVERT(varchar(3), GetDate(), 104) AS Datum Datum ----- 06.
Wenn ich nun Numeric umwandeln will, sieht es schon anders aus.
SELECT CONVERT(varchar(4), 1234.567) AS Fliess Fliess ------ Meldung 8115, Ebene 16, Status 5, Zeile 1 Arithmetischer Überlauffehler beim Konvertieren von numeric in den varchar-Datentyp.
Die Konvertierung kann die Zahl mit 4 Zeichen nicht vollständig umwandeln und sie schlägt deshalb fehl; mit VarChar(8) würde es gehen. Gleiches geschieht auch bei GUID, es werden die benötigte Anzahl an Zeichen erwartet.
Damit wäre ja alles klar … oder doch nicht?
Ein weitere Versuch mit Ganzzahlen smallint / int:
-- Substitute auf * (Sternchen, Asterisk) SELECT Zahl ,CONVERT(varchar(2), Zahl) AS Str2 ,CONVERT(varchar(3), Zahl) AS Str3 ,SUBSTRING(CONVERT(varchar(6), Zahl), 1, 2) AS Sub2 FROM (SELECT CONVERT(smallint, 1) AS Zahl UNION ALL SELECT 10 UNION ALL SELECT 100 UNION ALL SELECT 1000) AS Quelle Ergebnis: Zahl Str2 Str3 Sub2 ----------- ---- ---- ---- 1 1 1 1 10 10 10 10 100 * 100 10 1000 * * 10
Kein Laufzeitfehler, dafür findet man im Ergebnis nun plötzlich Sternchens * wieder (getestet mit MS SQL Server 2000, 2005, 2008 und 2008 R2 CTP). Verwendet man hingegen NVarChar, gibt es auf einmal einen Laufzeitfehler; nicht sehr konsequent.
Wenn man in der BOL dann unter „CAST und CONVERT (Transact-SQL)“ nachsieht, findet man das auch genau so im Absatz „Abschneiden und Runden von Ergebnissen“ dokumentiert.
Muss man halt nur wissen, sonst wundert man sich über das Ergebnis.