在 MySql 中将 VARCHAR 转换为 DECIMAL 值

Posted

技术标签:

【中文标题】在 MySql 中将 VARCHAR 转换为 DECIMAL 值【英文标题】:Converting VARCHAR to DECIMAL values in MySql 【发布时间】:2014-04-12 06:59:06 【问题描述】:

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

我该怎么做?每次我尝试通过 phpMyAdmin 中的 GUI 执行此操作时,我的所有值都会自动四舍五入为 0 和 1。

请帮帮我!

【问题讨论】:

【参考方案1】:

无需转换,您可以使用此查询找到最大值

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;

【讨论】:

【参考方案2】:

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

ALTER TABLE 表名修改列名 DECIMAL(M,D)

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

希望对大家有所帮助

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

【讨论】:

以上是关于在 MySql 中将 VARCHAR 转换为 DECIMAL 值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 中将 mediumtext 列更改为 varchar? (换表)

如何在 SQL 中将 varchar 字段 (YYYYMM) 转换为日期 (MM/01/YY)?

在 athena/presto 中将数组(varchar)转换为 varchar

如何在 presto 中将 varchar 转换为 MAP(VARCHAR,VARCHAR)

如何在 SQL 中将 varchar2 转换为数字

在 MSSQL 中将 bigint 转换为 varchar