1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Nummern via SQL Aufrunden

Dieses Thema im Forum "SQL - Structured Query Language" wurde erstellt von WernerS, 30. Januar 2018.

  1. WernerS

    WernerS Member

    Hallo,

    ich habe eine Tabelle mit 11000 Einträgen.
    Die Spalte reg enthält Zahlen wie

    33,01
    5,07
    10,08
    10,28

    Besteht eine Möglichkeit via MySQL alle auszulesen, aufzurunden und Update auf

    33,10
    5,10
    10,10
    10,30

    Mit PHP wäre das ja kein Problem, via PHP auslesen und Aufrunden und dann ein SQL Update durchführen. Geht sowas auch nur mit reinem SQL?
    Zuletzt bearbeitet: 30. Januar 2018
  2. Mat

    Mat Active Member c-b Experte

    Jo, das müsste bei jeder MySQL-Version gehen.

    Kannst du ja mal ausprobieren mit einer Vorschau-Abfrage:
    Code:
    SELECT spaltenname as 'vorher', ROUND(spaltenname + 0.04, 1) as 'nachher' FROM datenbankname.tabellenname
    Oder ohne Daten direkt ausprobieren:
    Code:
    SELECT ROUND(33.01 + 0.04, 1), ROUND(5.07 + 0.04, 1), ROUND(10.08 + 0.04, 1), ROUND(10.28 + 0.04, 1)
    Wenn du das häufiger brauchst, lohnt es sich vielleicht, eine Prozedur dafür zu schreiben.
  3. WernerS

    WernerS Member

    Ne, das war noch nicht das richtige.
    Aus 33,01 machte er 33,13 anstatt 33,10

    Um genauer zu sein geht es sich hier um 11000 Einträge in € die immer auf die nächsten 10 Cent. aufgerundet werden sollen. Aus 33,01€ wird 33,10€
    Aus 74,13€ wird 74,20€

    Ich habe es schon mit PHP, round und ceil versucht, dies klappte aber leider nicht wie gewünscht.
  4. Dompteur

    Dompteur Active Member

    Versuch es einmal mit :
    Code:
    TRUNC( spaltenname + 0.09, 1 )
  5. WernerS

    WernerS Member

    Er meckerte wegen TRUNC aber deine Lösung läuft 1A, Danke

    Code:
    SELECT reg AS 'vorher', TRUNCATE(reg + 0.09, 1) AS 'nachher' FROM test.rs37_price
    Aus 33,17 macht er mir nun 33,2.
    Habe mir mit deiner Lösung jetzt eine Schöne PHP Funktion gebaut die daraus zwei Nachkommastellen macht und das SQL Update durchführt.
  6. Dompteur

    Dompteur Active Member

    Ich habe es mit Oracle ausprobiert und dann nicht mehr so genau geschaut, dass die Funktion in MySql ein wenig anders heißt ;-)
  7. WernerS

    WernerS Member

    Habe ich mir fast gedacht.
  8. Mat

    Mat Active Member c-b Experte

    Wie macht der denn aus SELECT ROUND(33.01+0.04,1); am Ende 33.13?
  9. WernerS

    WernerS Member

    Mein Fehler. Es klappt auch mit diesem Beispiel.
    Nur zur Vollständigkeit. Wie sieht das ganze in PHP aus?

    IST-------------------SOLL
    25.3-------------------25.30
    57.32-------------------57.40
    119.1-------------------119.10

    Meine Lösung wäre jetzt
    PHP:
    $zahl 25.43;
    $zahl ROUND($zahl+0.04,1);  // ergibt 25.5;

    echo $zahl.'0'// 0 dran hängen um auf 25.50 zu kommen
    Ich denke das geht auch einfacher oder?
  10. asc

    asc Active Member c-b Experte

    number_format oder in deinem fall money_format

    Du musst dir halt im klaren sein, dass du am Ende, wenn du 25.3 zu 25.30 umwandelst, keine Zahl mehr hast, sondern eine Zeichenkette. Jedes mal wenn du versuchst 25.30 wieder in eine Zahl umzuwandeln hast du wieder 25.3. Es macht also nur Sinn eine Zahl entsprechend so umzuwandeln wenn du diese ausgeben möchtest, nicht aber wenn du damit rechnen möchtest.