2009-04-15 6 views
0

Hallo Ich komme aus Bosnien und Herzegowina und in unserer Grafschaft ist die kleinste Note Rechnung 0,05, Jetzt drängt die Regierung uns zu unseren Neuverhandlung Preisen auf 0,05 oder 0,00 abgerundet. Deshalb möchte ich SQL Scalar Valued Funktion zum Runden der Preise auf gegebenen Wert erstellen. Gibt es einige Build-in-Lösung, so kann ich Ressource meiner Abfragen speichern. Thanx in Beratung Mit freundlichen GrüßenRunde in MS SQL auf 0.05 oder 0.00

Bearbeiten Kommentar:

  • 0,1,2,3,4 auf Null
  • 5,6,7,8,9 gehen auf Null gehen + 1
+0

8,9,0,1,2 auf Null gehen? 3,4,5,6,7 gehe zu 5? – gbn

+0

Simething wie diese oder 0,1,2,3,4 gehen auf Null und 5,6,7,8,9 gehen auf Null + 1 – adopilot

+0

Wir runden auch in der Schweiz ab, aber das ist abgerundet – gbn

Antwort

1

Dank marc_s, änderte es, um Geld zu Datentyp.

float vs decimal vs money datatype article and flowchart

ALTER FUNCTION dbo.ufnRound (@number money) 
RETURNS money 
AS 
BEGIN 
    RETURN FLOOR(@number*20)/20 
END 
GO 
SELECT dbo.ufnRound (1.22), dbo.ufnRound (1.23), dbo.ufnRound (1.27), dbo.ufnRound (1.28) 

-- gives 1.2 1.2 1.25 1.25 
+0

würde ich einfach nicht wirklich nutzen "FLOAT" für meine Preise in jeder SQL-App ...... –

+0

Guter Punkt ... Ich hetzte zu Posten – gbn

+0

Fehlt dir nicht noch etwas? Du runderst 1,27 bis 1,25 - soweit ich den Beitrag verstanden habe, solltest du das auf 1,30 runden - nein? –

4

es gibt nichts eingebaut - aber es ist einfach genug, um zu erstellen:

EDIT: angepasst an Ihre spezielle Rundung muss :-)

create function dbo.RoundToFiveOrZero(@inputValue MONEY) 
returns MONEY 
as begin 
    return FLOOR((@inputValue + 0.05) * 20.0)/20.0 
end 

Verwenden Sie den Datentypen DECIMAL oder MONEY - was immer Ihnen am besten passt.

Benutzen Sie es wie folgt aus:

select 
    dbo.RoundToFiveOrZero(1.51), 
    dbo.RoundToFiveOrZero(1.53), 
    dbo.RoundToFiveOrZero(7.33), 
    dbo.RoundToFiveOrZero(7.37), 
    dbo.RoundToFiveOrZero(7.39) 

Welche 1.50 gibt, 1,50, 7,30, 7,40, 7,40, wie Ergebnisse.

Marc