[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Thema: aufrunden SQL

  1. #1
    Registriert seit
    Mar 2015
    Beiträge
    22

    aufrunden SQL

    Hallo,

    möchte einen Preis auf ganze Euro (x,51 bis x,99) bzw. auf 0,5 (x,01 bis x,49) aufrunden.
    Kann ich dies mit round() bewerkstelligen bzw. gibt's hier eine andere Funktion?

    LG
    Roman

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Auf die nächste Ganz-Zahl laufgerundet wird mit der Funktion CEILING (oder kurz CEIL)

    Code:
    Select Wert, Ceil(Wert)
       From YourTable ...
    Wenn Du auf 50 Cent aufrunden willst, musst Du zunächst mit 2 multiplizeren, das Resultat mit CEILING aufrunfen und anschließend wieder durch 2 dividieren.

    Code:
    Select Wert, Ceiling(Wert * 2) / 2,0 
       From YourTable ...
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    May 2002
    Beiträge
    1.121
    select
    case when MyFeld-int(MyFeld) between 0,51 and 0,99
    then int(MyFeld) + 1 else int(Myfeld) +0,5 end
    from MyFile

    Gruß Ronald

    Nachtrag:
    Wie immer.... Birgitta war schneller und mit der eleganteren Lösung

  4. #4
    Registriert seit
    Jul 2001
    Beiträge
    2.646
    Zitat Zitat von malzusrex Beitrag anzeigen
    Wie immer.... Birgitta war schneller und mit der eleganteren Lösung
    Also ich finde, so ein CASE sieht doch auch recht elegant und verständlich aus? :-)

    -h
    www.RZKH.de
    IBM Champion 2022, 2023, 2024
    IBM i Community Advocate https://www.youracclaim.com/badges/6...c-7ad4ba147af6
    Common / CEAC
    http://pub400.com

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Die Frage ist noch, wie man mit negativen Werten umgeht.
    Die Multiplikation mit einem Faktor ist schon etwas älter.
    Ich hatte ca. 1986 eine Kassenanwendung für den Düsseldorfer Dutyfree-Shop programmiert in der mit verschiedenen Währungen bezahlt werden konnte.
    Damit nicht ganz so viel Kleingeld zusammenkommt, wurde mit verschiedensten Rundungen auf 5/10/25/50 entsprechend mit den Faktoren 20/10/4/2 "gerundet".
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    CEILING rundet auch im negativen Bereich korrekt auf die nächste Ganzzahl auf.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ja und nein. Der Begriff heißt ja "aufrunden" und somit wird aus -1,5 dann eben -1.
    Möchte man aber -2, dann muss man mit ABS arbeiten:
    ceil(abs(wert)) * sign(wert)
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ja und nein. Der Begriff heißt ja "aufrunden" und somit wird aus -1,5 dann eben -1.
    Möchte man aber -2, ...
    Dann will man auch nicht aufrunden!
    Die ursprüngliche Frage war wie aufgerundet wird.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Die Standard-SQLFunktion heißt ja auch "Round()" und nicht "RoundUp()", im Sprachgebrauch sind die Begriffe "Aufrunden" und "Runden" also meist gleichbedeutend.
    Ich wollte ja auch nur ein ergänzende Methode erklären, die das Runden bei negativen Werten dann auch "Abrundet". Im kaufmännischen Bereich meist nicht gewünscht, im technisch/wissenschaftlichen oder auch BI-Bereich schon mal durchaus erforderlich.

    Im kaufmännischen Bereich wird da halt meist grundsätzlich mit positiven Werten und einem weiteren Kennzeichen (S/H, +/-, ...) gearbeitet um dieser Problematik und den daraus entstehenden Differenzen aus dem Weg zu gehen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    - die Funktion zum runden heißt round und hat 2 Parameter, der erste beinhaltet den Wert zum runden, der zweite die Nachkommastellen.
    - gerundet wird nach dem Betrag.
    - ab einer 5 in der ersten ungültigen Stelle wird aufgerundet
    - darunter wird abgerundet
    Beispiele:
    round(1.5, 0) liefert 2
    round(-1.5, 0) liefert -2
    alles andere ist Quatsch!!!

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Ich will auch mal Klugscheißer des Tages werden!

    @Malzusrex:
    Bei Deiner Case Anweisung wird, sofern die Ausgangszahl eine ganze Zahl ist, 0,5 hinzuaddiert. Ich glaube, das war nicht gewünscht.

    @Dieter:
    Nicht immer ist das kaufmännische Runden erwünscht.
    Aufrunden und Abfrunden auf die nächste Ganzzahl haben durchaus ihre Existenzberechtigung. (vergl. Gaußklammer)
    Wenn ich auf eine Palette 20 Kartons packen kann, dann benötige ich für 100 Kartons 5 Paletten, für 101 Kartongs jedoch 6 Paletten.

    ... und seit 7.3 kann die Funktion ROUND auch mit nur einem Parameter angegeben werden. In diesem Fall wird auf die nächste Ganz-Zahl kaufmännisch gerundet.
    ... sofern man bei der Funktion ROUND im zweiten Parameter eine negative Zahl angibt, kann man auch kaufmännisch z.B. auf den 10er (-1), auf den Hunderter (-2) etc. runden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  12. #12
    Registriert seit
    May 2002
    Beiträge
    1.121
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Ich will auch mal Klugscheißer des Tages werden!

    @Malzusrex:
    Bei Deiner Case Anweisung wird, sofern die Ausgangszahl eine ganze Zahl ist, 0,5 hinzuaddiert. Ich glaube, das war nicht gewünscht.


    Birgitta
    Stimmt! Habe es abgeändert
    (Auch wenn deine Variante immer noch einfacher und übersichtlicher ist)
    PHP-Code:
    select  myfeld,                                      
    case 
    when MyFeld-int(MyFeld)=0 then Myfeld else      
    case 
    when MyFeld-int(MyFeldbetween 0,51 and 0,99   
    then int
    (MyFeld) + else int(Myfeld) +0,5 end end   
    from MyFile 
    Gruß Ronald

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •