Problem convert Werte in der Spalte von VARCHAR(n) zu DEZIMAL
Ich habe einen SQL Server 2000-Datenbank mit einer Spalte vom Typ VARCHAR(255). Alle Daten, die entweder NULL, oder numerische Daten mit bis zu zwei Punkte für die Genauigkeit (z.B. '11.85'). Ich versuchte, führen Sie folgende T-SQL-Abfrage, erhalte aber die Fehlermeldung "Fehler beim konvertieren von Datentyp varchar in numeric'
SELECT CAST([MyColumn] AS DECIMAL)
FROM [MyTable];
Ich habe versucht, eine spezifische Besetzung, die auch nicht.
SELECT CAST([MyColumn] AS DECIMAL(6,2))
FROM [MyTable];
Ich habe auch versucht, die folgenden, um zu sehen, wenn irgendwelche Daten nicht numerisch ist, und der einzige zurückgegebenen Werte waren NULL.
SELECT ISNUMERIC([MyColumn]), [MyColumn]
FROM [MyTable]
WHERE ISNUMERIC([MyColumn]) = 0;
Habe ich versucht zu konvertieren in andere Datentypen, wie FLOAT und GELD, aber nur GELD war erfolgreich. Also ich habe Folgendes versucht:
SELECT CAST(CAST([MyColumn] AS MONEY) AS DECIMAL)
FROM [MyTable];
...das hat Prima funktioniert. Irgendwelche Ideen, warum die original-query failed? Wird es ein problem, wenn ich zuerst konvertieren zu GELD und dann zu DEZIMAL?
Dank!
InformationsquelleAutor Kevin Babcock | 2010-04-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist wahrscheinlich, dass dies davon abhängt, ob das Dezimaltrennzeichen ein Komma oder ein Punkt. Hier sind einige test-Abfragen und deren Ergebnisse:
In der Dokumentation für ISNUMERIC sagt :
Beide
3.6
und3,6
umgewandelt werden kannmoney
also, warumisnumeric('3,6')
zurück1
.Um dieses Problem zu beheben, Ersetze die Kommata mit Punkten (oder Umgekehrt, wenn Ihr system verwendet ein Komma als Dezimaltrennzeichen):
Andere option ist, ändern Sie die "decimal symbol" in Windows. Es ist im Config-Panel -> regions-und Sprachoptionen -> Format -> Weitere Einstellungen -> Zahlen.
InformationsquelleAutor Andomar
Ein weiterer Grund sind leere strings. Zum Beispiel, wenn Sie verwenden den Import-Assistenten zum importieren einer CSV-Datei leere Felder leere Zeichenketten, nicht-Nullen.
Dies ist ein häufiges idiom für die Festsetzung dieser:
InformationsquelleAutor Paul Chernoch
Select CAST(isnull(MyColumn,0) Decimal(4,2))
VON [MyTable];
InformationsquelleAutor Sasikiran