2016-05-19 20 views
0

Ich habe eine Abfrage (SQL Server), die eine Dezimalzahl zurückgibt. Ich brauche nur 2 Dezimalstellen ohne Rundung:SQL Get Dezimal mit nur 2 Stellen ohne Runde

enter image description here

Im Beispiel oben ich brauchen würde, bekommen: 3381,57

Jeder Hinweis?

+2

'cast (NumCol als Dezimalzahl (12,2))'? – jarlh

+0

@jarlh, OP will Trunkierung, keine Rundung ... – Shnugo

+0

@Shnugo, macht MS SQL Server 'Cast' Runde? Unerwartet. – jarlh

Antwort

2

Sie können dies über die ROUND() Funktion erfüllen die Länge und Präzision Parameter mit Ihrem Wert zu kürzen, anstatt wirklich Runden es:

SELECT ROUND(3381.5786, 2, 1) 

Die zweite Der Parameter 2 gibt an, dass der Wert auf zwei Dezimalstellen gerundet wird, und der dritte Genauigkeitsparameter gibt an, ob eine tatsächliche Rundung oder Abschneidung ausgeführt wird (Werte ungleich Null werden abgeschnitten und nicht abgerundet).

Beispiel

enter image description here

Sie können see an interactive example of this in action here.

+0

Sie könnten ein 'CAST (RUNDE (...) AS DECIMAL (12,2))' ... +1 von meiner Seite hinzufügen – Shnugo

0

Wenn Sie die Darstellung steuern möchten, müssen Sie den Wert als Zeichenfolge ausgeben. Ein Verfahren ist in eine Dezimalzahl zu konvertieren und dann in einen String:

select cast(cast(total as decimal(10, 2)) as varchar(255)) 

Eine andere Methode ist, um eine Zeichenfolge zu konvertieren str() verwenden. Dies erfordert jedoch oft die Entfernung von Räumen:

select replace(str(total, 10, 2), ' ', '') 
+1

Beide Vorschläge runden das auf 3381,58 ab. .. und btw: es gibt eine paranthesis zu viel (erste suggestion nach total) ... – Shnugo

0

Eine andere Möglichkeit ist TRUNCATE zu verwenden:

SELECT 3381.5786, {fn TRUNCATE(3381.5786,2)}; 

LiveDemo

+1

Lustig, habe das vorher nicht gesehen [ODBC-Skalarfunktionen] (https://msdn.microsoft.com/en-us/library/bb630290.aspx) – Shnugo