Mit T-SQL und Microsoft SQL Server möchte ich die Anzahl der Dezimalstellen angeben, wenn ich eine Division zwischen 2 Ganzzahlen wie:
select 1/3
Das kehrt derzeit zurück 0
. Ich möchte, dass es zurückkommt 0,33
.
Etwas wie:
select round(1/3, -2)
Das geht aber nicht Wie kann ich das gewünschte Ergebnis erzielen?
sql-server
sql-server-2008
division
rounding
LaBracca
quelle
quelle
Antworten:
Die Vorschläge von stb und xiowl sind in Ordnung, wenn Sie nach einer Konstanten suchen. Wenn Sie vorhandene Felder oder Parameter verwenden müssen, bei denen es sich um Ganzzahlen handelt, können Sie diese zuerst in Gleitkommazahlen umwandeln:
oder
quelle
decimal
Weil SQL Server eine Ganzzahldivision durchführt. Versuche dies:
Dies ist hilfreich, wenn Sie Ganzzahlen als Parameter übergeben.
quelle
Es ist nicht notwendig, beide zu besetzen. Der Ergebnisdatentyp für eine Division ist immer derjenige mit der höheren Priorität für den Datentyp . Die Lösung muss also sein:
oder
quelle
verwenden
Dies wird den Job machen.
quelle
Ich verstehe, dass
CAST
ing toFLOAT
in MySQL nicht erlaubt ist und einen Fehler auslöst, wenn Sie versuchen,CAST(1 AS float)
wie in MySQL dev angegeben .Die Problemumgehung ist einfach. Mach einfach
Verwenden Sie dann
ROUND
, um eine bestimmte Anzahl von Dezimalstellen wie zu erreichenDie obige SQL dividiert 1 durch 2 und gibt einen Gleitkommawert auf 3 Dezimalstellen zurück, wie es der Fall wäre
0.500
.Man kann
CAST
die folgenden Typen wählen : binär, char, Datum, Datum / Uhrzeit, dezimal, json, nchar, signiert, Uhrzeit und ohne Signatur .quelle
CAST
, es erlaubt nur kein CastingFLOAT
. Cast toDECIMAL
stattdessen. Siehe z . B. stackoverflow.com/questions/7368163/… .Dieser Trick funktioniert anscheinend in SQL Server und ist kürzer (basierend auf früheren Antworten).
Oder:
quelle
SELECT 100.0 * @Elapsed / @Total
Benutze das
select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result
Hier in diesem SQL konvertieren Sie zuerst in Float oder multiplizieren Sie mit 1,00. Diese Ausgabe ist eine Float-Zahl. Hier betrachte ich 2 Dezimalstellen. Sie können wählen, was Sie brauchen.
quelle
Wenn Sie hierher gekommen sind (genau wie ich), um die Lösung für den ganzzahligen Wert zu finden , ist hier die Antwort:
gibt 5 zurück
quelle