[NEWSboard IBMi Forum]
  1. #1
    hs is offline [professional_User]
    Registriert seit
    Jun 2001
    Beiträge
    364

    Question für SQL Profis: Preisliste runden mit SQL

    Ich benötige die Hilfe von einem SQL-Profi:

    Ich möchte eine Preisliste aufrunden auf volle 50 Cent, d.h.
    alle XXX,00 bis XXX,49 --> XXX,50 und
    alle XXX,50 bis XXX,99 --> XXX+1,00

    Hat jemand von euch eine Idee, wie man dies über SQL erledigen kann, entweder mit ROUND oder mathematischen Funktionen?

    Danke für eure Hilfe
    HS

  2. #2
    Registriert seit
    Jan 2002
    Beiträge
    32

    Post

    Bin zwar keiner, aber diese Formulierung sollte funktionieren:

    (ROUND((PREIS + 0,25) * 2, 0))/2

    geht bestimmt auch einfacher

    Grüße, Andreas

    P.S.: Da soll noch mal einer sagen, die Preise würden durch die Euro-Umstellung nicht steigen

  3. #3
    hs is offline [professional_User]
    Registriert seit
    Jun 2001
    Beiträge
    364

    Post

    Hallo Andreas,

    vielen Dank für Deinen Tip.

    Ich habe die Funktion soeben probiert, leider steht mir die Funktion ROUND nicht zur Verfügung, vermutlich da V3.7.

    Das Problem müsste doch mathematisch zu lösen sein?

    Gruß
    HS

    PS: Preise werden bei uns jedes Jahr erhöht. Auch ohne Euroumstellung.

  4. #4
    Registriert seit
    Jan 2002
    Beiträge
    32

    Post

    Kein ROUND?!?

    Weiß leider auch nicht, wie man von Dezimalzahlen einfach das Ende abschneidet, ohne Integer rauszubekommen. Deshab noch etwas umständlicher über zweifache Typumwandlung:

    DECIMAL(INTEGER((PREIS+0,5)*2), 10, 2)/2

    Wobei die fettgedruckten Zahlen die Genauigkeit des Dezimalfelds angeben und noch auf das Zielfeld angepaßt werden müssen. Am besten mal ein wenig mit SELECT rumprobieren.

    P.S.: Na, dann

  5. #5
    hs is offline [professional_User]
    Registriert seit
    Jun 2001
    Beiträge
    364

    Post

    Ich habs glaub ich:

    < 0,5

    update datei set preisneu =
    integer(pralt)+0,5 where
    pralt-integer(pralt) < 0,5 and
    pralt-integer(pralt) > 0

    und >= 0,5

    update datei set preisneu =
    integer(pralt+0,5) where
    pralt-integer(pralt)>= 0,5


    Gruß
    HS

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241

    Post

    Fast gut, aber INTEGER erlaubt maximal 9 Stellen !

    => decimal(decimal((PREIS+0,5)*2, 11, 0), 11, 2) / 2

    Die innere Typumwandlung schneidet die Nachkomma ab, die äussere Typwandlung fügt Nachkomma hinzu.
    Die 2-Malige Typwandlung ist erforderlich, da SQL sonst Zwischenergebnisse mit der aktuellen Genauigkeit weiterberechnet.
    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

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  4. Runden im SQL
    By skipper_k in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 19-06-02, 15:53
  5. Runden über SQL Hiiiiilfe!!!!
    By infomio in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 27-11-01, 19:31

Berechtigungen

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