2015-09-02 18 views
6

verwenden Ich möchte ROUNDDOWN-Funktion verwenden.Wie ROUNDDOWN in sqlserver

Wenn ich versuchte, mit der folgenden Abfrage, gibt es mir eine Fehlermeldung, dass "'Rounddown' ist kein anerkannter integrierter Funktionsname."

select rounddown(25.227,2) 

Meine Forderung ist, den Wert auf zwei Dezimalstellen

für Ex ABRUNDEN: Wert 25,22789 Ergebnis 25.22

sein sollte und auch

für ex aufrunden: Wert 25,22789 Ergebnis sollte 25.23 sein

Irgendwelche Hilfe?

Vielen Dank im Voraus

+0

Verwendung 'select round (25.227,2)' – lad2025

+0

Dies ist Roundup und wie über ABRUNDEN ? – Santosh

+1

Woher hast du diesen Funktionsnamen? – Paolo

Antwort

5

Verwenden dritte Parameter von ROUND() Funktion trunkieren und dann CONVERT() es zu DECIMAL(x, 2) zu loswerden von unerwünschten Nullen.

Fiddle demo

SELECT CONVERT(DECIMAL(10,2), ROUND(25.227, 2, 1)) RoundDown, 
     CONVERT(DECIMAL(10,2), ROUND(25.227, 2, 0)) RoundUp 

Ergebnisse

| RoundDown | RoundUp | 
|-----------|---------| 
|  25.22 | 25.23 | 
+0

Eigentlich bedeutet "Aufrunden", dass "25.222" zu "25.23" werden sollte. Ich denke nicht, dass dies mit einer einzigen T-SQL-Funktion –

+1

@ PanagiotisKanavos OP getan werden kann, vorausgesetzt, '25.22789' sollte in' 25.23' konvertiert werden (als Standard), nichts über '25.222'. –

+0

Vereinbaren Sie mit @ StanislovasKalašnikovas. Dies funktioniert für gegebene OP-Beispiele. – Kaf

3

Ich glaube, Sie suchen, entweder CEILING() oder floor() Funktion wie

select CEILING(25.227) //results in 26 

(OR)

select FLOOR(25.227) //Results in 25 

EDIT:

für ex: Wert 25,22789 Ergebnis sollte 25,22

Sie mögen

select round(25.22789, 2, 2) 

unter

versuchen können, die in 25.22000

+0

Dies wird nur auf Integer gerundet. –

+0

Ich denke, das ist was OP suchen, obwohl nicht genau sicher. – Rahul

+0

Ihre Abfrage gibt '26' –

0

ROUND-Funktion

Sie führen verwenden SELECT ROUND(@num, 2, 1)

Wie pro ROUND Beschreibung:

ROUND (numeric_expression , length [ ,function ]) 

Wenn die Funktion weggelassen ist oder einen Wert von 0 (default) wird numeric_expression gerundet. Wenn ein Wert ungleich 0 angegeben wird, wird numerischer_ausdruck abgeschnitten.

RESULT

25.22 

CHARINDEX und LEFT

Alternativ können Sie CHARINDEX und LEFT in folgenden verwenden, wenn Sie "ROUND DOWN" tun wollen und verwenden Sie einfach ROUND"ROUND UP" zu tun

DECLARE @num DECIMAL(16,3) = 25.227 

SELECT LEFT(@num,CHARINDEX('.',@num)+2) as [RoundDown], 
     ROUND(@num,2) as [RoundUp] 

RESULT

RoundDown RoundUp 
25.22  25.23 

UPDATE

Per Kommentare über ROUNDUP Sie in folgenden verwenden:

SELECT ROUND(22.22289 + 0.005, 2) as [RoundUp1] 

RESULT

25.23 

DEMO

Sie können es testen bei SQL FIDDLE

+3

Wer hat die Kommentare ohne Kommentare gekippt? –

1

Für Abrunden, verwenden Sie nur einige einfache mathematische (eine Dezimalstelle weiter als du willst ro und bis):

SELECT ROUND(25.22789 - 0.005, 2)

OUTPUT 25.22

Für Aufrundung, einfach verwenden ROUND:

SELECT ROUND(22.22789, 2)

OUTPUT 25.23

+1

Keine Notwendigkeit für die Subtraktion, ROUND akzeptiert einen dritten Parameter zum Abschneiden (Abrunden) auf eine bestimmte Anzahl von Ziffern –

+0

Fair genug. Ich überlasse die Antwort als generische Lösung (d. H. Sie wird für Oracle und möglicherweise andere funktionieren). –

0

Sie können auch CAST:

declare @num decimal(18,5) = 22.22719 
    select @num, CAST(@num as decimal(18,3))