Frage

Gibt es angesichts der Einschränkung, nur T-SQL in SQL Server 2005 zu verwenden, eine bessere Möglichkeit, den Dezimalpunkt aus einem Gelddatentyp zu entfernen, als eine Konvertierung in einen Varchar-Wert (hier implizit) und dann eine Ersetzung des Dezimalpunkts?

Hier ist, was ich derzeit habe.

SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')

Das gibt die gewünschten Werte 123 und 1999 zurück, aber ich habe mich gefragt, ob es einen besseren Weg gibt.Irgendwelche Gedanken?

War es hilfreich?

Lösung

Mit 100 multiplizieren und dann in eine Ganzzahl umwandeln.

Andere Tipps

Sie sollten den Datentyp „money“ niemals zum Speichern von Geldwerten verwenden.Wenn Sie Berechnungen durchführen, erhalten Sie abgeschnittene Ergebnisse.Führen Sie Folgendes aus, um zu sehen, was ich meine

DECLARE
@mon1 MONEY,
@mon2 MONEY,
@mon3 MONEY,
@mon4 MONEY,
@num1 DECIMAL(19,4),
@num2 DECIMAL(19,4),
@num3 DECIMAL(19,4),
@num4 DECIMAL(19,4)

SELECT
@mon1 = 100, @mon2 = 339, @mon3 = 10000,
@num1 = 100, @num2 = 339, @num3 = 10000

SET @mon4 = @mon1/@mon2*@mon3
SET @num4 = @num1/@num2*@num3

SELECT @mon4 AS moneyresult,
@num4 AS numericresult

Ausgabe:2949.0000 2949.8525

Könnten Sie den Anwendungsfall etwas genauer beschreiben?Das Entfernen des Dezimalpunkts aus der Darstellung ist etwas ungewöhnlich, da dadurch alle Informationen über den Maßstab verloren gehen.Gehen Sie davon aus, dass es immer zwei Ziffern geben wird?Wenn ja, können Sie vereinfachen, mit 100 multiplizieren und dann runden, bevor Sie es in eine Zeichenfolge konvertieren.

Beachten Sie, dass der Gelddatentyp bis zu vier Nachkommastellen haben kann.Werte mit mehr als zwei Ziffern funktionieren möglicherweise weder bei Ihrer ursprünglichen Lösung noch beim x100-Trick wie erwartet.

Hier ist die Magie:

DataFormatString="{0:c0}

Dadurch werden die Dezimalstellen entfernt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top