在MySql中将VARCHAR转换为DECIMAL值

时间:2014-03-09 05:21:57

标签: mysql sql phpmyadmin typeconverter

我已经将包含字符串值(例如,表示)和浮动值(例如0.87)的CSV文件导入到phpMyAdmin数据库的表中。在我获取所有字符串值并仅保留具有十进制值的行之后,我需要将这些值从VARCHAR转换为DECIMAL / FLOAT,以便我可以对此属性执行MAX()。

我该怎么做?每次我通过phpMyAdmin中的GUI尝试这样做时,我的所有值都会自动舍入为0和1。

请帮助我!

4 个答案:

答案 0 :(得分:6)

如果没有转换,您可以使用此查询找到最大值

select max(cast(stuff as decimal(5,2))) as mySum from test;

检查此SQLfiddle

您的演示表:

create table test (
   name varchar(15),
   stuff varchar(10)
);

insert into test (name, stuff) values ('one','32.43');
insert into test (name, stuff) values ('two','43.33');
insert into test (name, stuff) values ('three','23.22');

您的查询:

对于SQL Server,您可以使用:

select max(cast(stuff as decimal(5,2))) as mySum from test;

答案 1 :(得分:3)

如果您对MySQL拥有管理员权限,我认为您需要尝试在MySQL上执行此类操作。

ALTER TABLE tablename MODIFY columnname DECIMAL(M,D)

对于M,D变量,请阅读 - http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html

MySQL应该能够自动将文本转换为数字。只是MySQL中的数据类型可能不是小数,这就是为什么你不能存储任何小数。

答案 2 :(得分:3)

请注意,如果您从VARCHAR转换为DECIMAL并且未指定精确度和最大位数(即DECIMAL而不是DECIMAL(5,2)),MySQL将自动生效将小数舍入为整数值。

答案 3 :(得分:0)

希望它可能对某人有帮助

select convert( if( listPrice REGEXP '^[0-9]+$', listPrice, '0' ), DECIMAL(15, 3) ) from MyProduct WHERE 1