Vorwort In diesem Artikel wird hauptsächlich ein Problem beschrieben, das bei der Konvertierung von Gleitkommatypen in Zeichentypen in MySQL auftritt. Er wird zu Ihrer Information und zum Lernen weitergegeben. Schauen wir uns ohne weiteres die ausführliche Einführung an. 1. Problembeschreibung Heute bin ich auf eine Datenaktualisierungsanforderung gestoßen, nämlich das Gewicht des Produkts zu ändern (der Feldtyp ist Float). Nachdem das Gewicht des Produkts geändert wurde, muss es in der Protokolltabelle aufgezeichnet werden (der Feldtyp ist varchar). Die Tabellenstruktur ist wie folgt: Datentabelle vorübergehend aktualisieren: CREATE TABLE `temp_170830` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel-ID', `goods_sn` varchar(255) NOT NULL DEFAULT '' KOMMENTAR 'Produktcode', `goods_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT 'Produktgewicht', `actual_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT 'Tatsächliches Gewicht', `new_actual_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT 'Neues tatsächliches Gewicht', `create_user` varchar(30) NOT NULL DEFAULT '' COMMENT 'Erstellt von', Primärschlüssel (`id`), SCHLÜSSEL `idx_goods_sn` (`goods_sn`) ) ENGINE=InnoDB AUTO_INCREMENT=8192 DEFAULT CHARSET=utf8 COMMENT='Temporäre Aktualisierungsgewichtstabelle'; Protokolltabelle: Tabelle „log_weight“ erstellen ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel-ID', `goods_sn` varchar(50) NOT NULL DEFAULT '' KOMMENTAR 'Produktcode', `which_col` varchar(100) NOT NULL DEFAULT '' COMMENT 'Feld ändern', `old_value` varchar(50) NOT NULL DEFAULT '0.00' COMMENT 'Wert vor Update', `new_value` varchar(50) NOT NULL DEFAULT '0.00' COMMENT 'Aktualisierter Wert', `update_user` varchar(100) NICHT NULL STANDARD '' KOMMENTAR 'Ersteller', `update_time` datetime NICHT NULL STANDARD CURRENT_TIMESTAMP BEI UPDATE CURRENT_TIMESTAMP, `wh_update_time` Zeitstempel NICHT NULL STANDARD CURRENT_TIMESTAMP BEI UPDATE CURRENT_TIMESTAMP KOMMENTAR 'Änderungszeit des Datensatzes', Primärschlüssel (`id`), SCHLÜSSEL `idx_goods_sn` (`goods_sn`), SCHLÜSSEL `idx_update_user` (`update_user`), SCHLÜSSEL `wh_update_time` (`wh_update_time`) ) ENGINE=InnoDB AUTO_INCREMENT=14601620 DEFAULT CHARSET=utf8 COMMENT='Protokoll der Gewichtsänderung'; Wie in der oben erstellten Tabelle gezeigt, muss ich die Felder „actual_weight“ und „new_actual_weight“ der Tabelle „temp_170830“ in die Felder „old_value“ und „new_value“ der Tabelle „log_weight“ übertragen. Die SQL-Anweisungen lauten wie folgt: INSERT INTO log_weight(Warennummer, welche_Spalte, alter_Wert, neuer_Wert, Benutzer aktualisieren) SELECT Warennummer, „tatsächliches Gewicht“, „tatsächliches Gewicht“, „neues tatsächliches Gewicht“, „Benutzer erstellen“ FROM temp_170830; Ich dachte, ich wäre hier fertig, schließlich habe ich nur einige Protokolldatensätze eingefügt. Später stellte ich bei einer einfachen Überprüfung fest, dass die Daten ein wenig falsch waren, wie in der folgenden Abbildung dargestellt: Screenshot der temporären Tabellendaten: Screenshot der Protokolltabellendaten: Im Vergleich dazu können wir feststellen, dass die eingefügten Protokolldatensätze ohne Grund viel mehr Dezimalstellen am Ende haben. Ich weiß nicht, woher sie kommen. Später dachte ich, dass es daran liegen könnte, dass die Gleitkommadaten nicht teilbar sind. Bei der Konvertierung in varchar werden auch die Dezimalstellen am Ende herausgenommen. Ich bin mir im Moment nicht sicher. Ich werde mehr hinzufügen, nachdem ich es bestätigt habe. Dann fand ich eine Methode zur Konvertierung in varchar, concat, und passte sie wie folgt an: INSERT INTO log_weight(Warennummer, welche_Spalte, alter_Wert, neuer_Wert, Benutzer aktualisieren) SELECT Warennummer, „tatsächliches Gewicht“, concat(tatsächliches Gewicht, „), concat(neues tatsächliches Gewicht, „), Benutzer erstellen FROM temp_170830; Das Protokollierungsproblem wurde erfolgreich gelöst. Um es zusammenzufassen: 1 Versuchen Sie beim Aufzeichnen numerischer Felder für Preise und Gewichte, keine Gleitkommatypen zu verwenden! ! ! , Gleitkommazahlen haben viele Fallstricke (zum Beispiel können Gleitkommatypen nicht als gleich beurteilt werden!!!), daher ist es am besten, den Integer-Typ int zu verwenden. Wenn im Geschäftsleben Dezimalzahlen angezeigt werden müssen, lesen Sie sie aus und dividieren Sie sie durch die entsprechende Anzahl von Ziffern. Beispielsweise sollten 99,98 Yuan als 9998 gespeichert werden, und beim Auslesen verwenden Sie 9998/100, um sie anzuzeigen. 2 Wenn Sie Float in Varchar konvertieren, sollten Sie zuerst Float mit der Funktion concat in Varchar konvertieren und es dann im Varchar-Feld speichern. Nun, das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. |
<<: Detaillierte Erklärung des Sandbox-Mechanismus von Vue3
>>: Linux verwendet join -a1, um zwei Dateien zusammenzuführen
Holen Sie sich die Anzahl der Verbindungen --- Ho...
Einführung In diesem Artikel stellen wir vor, wie...
Die Funktion DATE_ADD() addiert einem Datum ein a...
Wie unten dargestellt: Ersetzen Sie es einfach, w...
Docker entspricht einem Container, der je nach de...
Vorwort Seit der offiziellen Einführung von vue3....
Prinzip: Blenden Sie zuerst das Eingabeelement au...
Inhaltsverzeichnis Vorwort MySQL Master-Slave-Rep...
Inhaltsverzeichnis Gängige Zahlungsarten in Proje...
Redis ist ein verteilter Cache-Dienst. Caching is...
In diesem Artikelbeispiel wird der spezifische Co...
1. Dynamisches Laden von Skripten Mit der wachsen...
Wir stoßen häufig auf dieses Problem: Wie kann ma...
In Google Chrome werden Sie nach der erfolgreiche...
Als ich heute einen Flash-Werbecode schrieb, habe ...