我已经将包含字符串值(例如,表示)和浮动值(例如0.87)的CSV文件导入到phpMyAdmin数据库的表中。在我获取所有字符串值并仅保留具有十进制值的行之后,我需要将这些值从VARCHAR转换为DECIMAL / FLOAT,以便我可以对此属性执行MAX()。
我该怎么做?每次我通过phpMyAdmin中的GUI尝试这样做时,我的所有值都会自动舍入为0和1。
请帮助我!
答案 0 :(得分:6)
如果没有转换,您可以使用此查询找到最大值
select max(cast(stuff as decimal(5,2))) as mySum from test;
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