Page 1 of 1

Aktualisieren Sie die MySQL -Datenbankspalte, um alle Werte auf 2 Dezimalstellen zu runden

Posted: 19 Aug 2025, 03:29
by Anonymous
Ich habe eine MySQL -Datenbank mit rund 5000 Produkten, die vor einiger Zeit von Excel importiert wurden. Leider schneidet Excel Werte mit nachlaufenden Nullen ab, sodass sie in einer Mischung aus Werten mit 0, 1, 2 oder (gelegentlich) in der Preisspalte importiert wurden. Einige Produkte haben keinen Preis und müssen so bleiben (£ Call for Price). Die Spalte selbst ist Varchar und nein, ich kann die Spalte nicht auf Dezimalal ändern (10,2);) < /p>
Einfach, dachte ich. Mein Test: < /p>

Code: Select all

SELECT ID, Price, ROUND(Price, 2) as Fixed
FROM table
WHERE Price REGEXP '[0-9]+.?[0-9]*'
< /code>
Ausgabe: < /p>
ID      Price   Fixed
1001332 60.31   60.31
1001334 66      66.00
1001336 32.2879 32.29
1001338 66      66.00
1001340 42.2    42.20
1001342 42.2    42.20
1001344 42.2    42.20
1001346 42.2    42.20
1001348 29.54   29.54
1001350 31.07   31.07
...
< /code>
Ich dachte, ich würde es rippen lassen: < /p>
UPDATE table
SET Price = ROUND(Price, 2)
WHERE Price REGEXP '[0-9]+.?[0-9]*'
< /code>
Ausgabe:
0 Fehler. 0 Zeilen betroffen. < /P>
Ich habe einige andere Varianten ausprobiert: < /p>
UPDATE table
SET Price = ROUND(Price, 2)
WHERE Price  ""
< /code>
Ausgabe:
0 Fehler. 0 Zeilen betroffen. < /P>
UPDATE table
SET Price = ROUND(Price, 2)
WHERE 1
< /code>
Ausgabe:
Abgeschnittener falscher Doppelwert: ''
(Wegen dieser leeren Werte) < /p>
brauche ich eine Unterabfrage?UPDATE table AS t1
SET Price = (
SELECT ROUND(Price, 2)
FROM table AS t2
WHERE t1.ID = t2.ID
)
WHERE Price REGEXP '[0-9]+.?[0-9]*'
(Ich habe es nicht gewagt, dass es nicht richtig mit den Zeilen übereinstimmt und die Datenbank abräumt!)
andere Fragen implizieren, dass mein erstes Update funktioniert. an diesem Punkt erschöpft ...