将MySql中的VARCHAR转换为DECIMAL值

9
我已经将一个包含字符串值(例如eating)和浮点值(例如0.87)的CSV文件导入到了phpMyAdmin数据库中的一个表中。在摆脱所有字符串值并保留仅具有十进制值的行后,我需要将这些值从VARCHAR转换为DECIMAL/FLOAT,以便可以在该属性上执行MAX()操作。
如何做到这一点?每当我尝试通过phpMyAdmin GUI执行此操作时,所有的值都会自动舍入为0和1。
请帮助我!
4个回答

9

使用这个查询,你可以在不进行转换的情况下找到最大值。

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;

4

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


3
如果您在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中的数据类型可能还不是十进制,所以您无法存储任何小数。

0
希望这能帮到有需要的人。
select convert( if( listPrice REGEXP '^[0-9]+$', listPrice, '0' ), DECIMAL(15, 3) ) from MyProduct WHERE 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接