SQL Server - T-SQL Entfernen Sie den Dezimalpunkt vom Gelddatentyp

Translate

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 (hier implizit) und dann den Dezimalpunkt zu ersetzen?

Hier ist was ich aktuell habe.

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

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

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Mit 100 multiplizieren und dann in ein int konvertieren.

Quelle
Translate

Sie sollten niemals den Gelddatentyp verwenden, um Geldwerte zu speichern. Wenn Sie Berechnungen durchführen, erhalten Sie abgeschnittene Ergebnisse. Führen Sie die folgenden Schritte 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

Quelle
Translate

Könnten Sie den Anwendungsfall etwas genauer beschreiben? Das Entfernen des Dezimalpunkts aus der Darstellung ist etwas ungewöhnlich, da Sie alle Informationen über die Skala verlieren. Gehen Sie davon aus, dass es immer zwei Ziffern geben wird? In diesem Fall können Sie das Multiplizieren mit 100 vereinfachen und dann runden, bevor Sie in eine Zeichenfolge konvertieren.

Quelle
Translate

Beachten Sie, dass der Gelddatentyp bis zu 4 Stellen nach der Dezimalstelle haben kann. Werte mit mehr als zwei Ziffern funktionieren möglicherweise weder für Ihre ursprüngliche Lösung noch für den x100-Trick wie erwartet.

Quelle
Nathan Lee
Translate

Hier ist die Magie:

DataFormatString="{0:c0}

Dadurch werden die Dezimalstellen entfernt.

Quelle