( Wenn Sie SQL Server 2012 oder neuer verwenden, finden Sie in der Antwort von @ wBob einen saubereren Ansatz. Der in meiner Antwort unten beschriebene Ansatz ist nur erforderlich, wenn Sie SQL Server 2008 R2 oder älter verwenden. )
Sie brauchen (oder wollen) nicht das Tausendertrennzeichen, wenn Sie in konvertieren NUMERIC
, unabhängig davon, ob es sich um Komma, Punkt oder Leerzeichen handelt. Entfernen Sie sie also zuerst. Dann konvertieren Sie das Komma in einen Punkt / eine Dezimalstelle und Sie sind fertig:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
Kehrt zurück:
7000.45
Der Vollständigkeit halber sollte ich erwähnen, dass ich auch versucht habe:
SET LANGUAGE Greek;
Betrachtet man verschiedene Formatstile für CONVERT , so gilt hier nichts.
Die FORMAT- Funktion, aber der Eingabetyp muss ein numerischer Wert oder ein Wert für Datum / Uhrzeit / Datum / Uhrzeit sein (dieser und dieser wurde in SQL Server 2012 eingeführt und gilt daher nicht für SQL Server 2008 R2 oder älter).
Und sonst schien nichts zu funktionieren. Ich hatte gehofft, etwas eleganteres als zwei REPLACE
Anrufe zu finden, aber bisher kein solches Glück.
Um nur zu erwähnen, dass dies keine reine T-SQL-Lösung ist, kann dies auch über SQLCLR erreicht werden. Und es gibt eine vorgefertigte Funktion in der SQL # -Bibliothek (die ich geschrieben habe) mit dem Namen String_TryParseToDecimal . Diese Funktion ist in der kostenlosen Version verfügbar und funktioniert in jeder Version von SQL Server ab SQL Server 2005:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
Kehrt zurück:
7000.45000000000000000000