La conversion de type est une exigence que nous rencontrons souvent dans le développement quotidien. Récemment, nous avons rencontré un problème lors de la conversion du type à virgule flottante en type de caractère, je vais donc le partager en résumé. L'article suivant vous le présente principalement dans Friends. besoin peut se référer aux informations pertinentes sur les problèmes qui peuvent être rencontrés lors de la conversion de virgule flottante en caractère dans MySQL.
Avant-propos
Cet article vous présente principalement un problème rencontré lors de la conversion de virgule flottante en caractère dans MySQL Share Il est fourni pour référence de chacun. et étudier. Je n'en dirai pas beaucoup plus ci-dessous. Jetons un coup d'œil à l'introduction détaillée.
Une description du problème
Aujourd'hui j'ai rencontré un besoin de rafraîchir les données, qui est de modifier le poids du produit (type de champ est float), modifié Après le poids du produit, il doit être enregistré dans la table de journal (le type de champ est varchar) La structure de la table est la suivante :
Actualiser temporairement le. tableau de données :
CREATE TABLE `temp_170830` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `goods_sn` varchar(255) NOT NULL DEFAULT '' COMMENT '产品编码', `goods_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT '产品重量', `actual_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT '实际重量', `new_actual_weight` float(9,4) NOT NULL DEFAULT '0.0000' COMMENT '新的实际重量', `create_user` varchar(30) NOT NULL DEFAULT '' COMMENT '创建人', PRIMARY KEY (`id`), KEY `idx_goods_sn` (`goods_sn`) ) ENGINE=InnoDB AUTO_INCREMENT=8192 DEFAULT CHARSET=utf8 COMMENT='临时刷重量表';
Tableau de journal :
CREATE TABLE `log_weight` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `goods_sn` varchar(50) NOT NULL DEFAULT '' COMMENT '产品编码', `which_col` varchar(100) NOT NULL DEFAULT '' COMMENT '修改字段', `old_value` varchar(50) NOT NULL DEFAULT '0.00' COMMENT '更新前值', `new_value` varchar(50) NOT NULL DEFAULT '0.00' COMMENT '更新后值', `update_user` varchar(100) NOT NULL DEFAULT '' COMMENT '创建人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `wh_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间', PRIMARY KEY (`id`), KEY `idx_goods_sn` (`goods_sn`), KEY `idx_update_user` (`update_user`), KEY `wh_update_time` (`wh_update_time`) ) ENGINE=InnoDB AUTO_INCREMENT=14601620 DEFAULT CHARSET=utf8 COMMENT='重量修改日志';
Comme le montre le tableau construit ci-dessus, je dois Les champs actual_weight et new_actual_weight de la table temp_170830 sont respectivement vidés dans les champs old_value et new_value de la table log_weight. L'instruction SQL est la suivante :
<🎜. >
INSERT INTO log_weight(goods_sn, which_col, old_value, new_value, update_user) SELECT goods_sn,'actual_weight',actual_weight,new_actual_weight,create_user FROM temp_170830;
Capture d'écran des données de la table temporaire :
Capture d'écran des données de la table de journal :
La comparaison montre que les données d'enregistrement du journal insérées comportent de nombreux bits supplémentaires à la fin sans raison. Je ne sais pas d'où viennent les décimales. Ensuite, j'y ai pensé, peut-être. c'est parce que les données originales à virgule flottante ne peuvent pas être divisées. Lors de la conversion en varchar, les suivantes ont également été affichées. Ce n'est pas très bon pour le moment. Confirmé, je l'ajouterai plus tard après confirmation, puis je l'ai temporairement trouvé. une méthode pour convertir varchar en concat, et l'a ajusté comme suit :INSERT INTO log_weight(goods_sn, which_col, old_value, new_value, update_user) SELECT goods_sn,'actual_weight',concat(actual_weight,''),concat(new_actual_weight,''),create_user FROM temp_170830;
Le résumé est le suivant :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!