在mysql中将科学记数法从Varchar转换为十进制
在mySQL数据库中,数据集中的所有值都存储为varchar,显示欧元金额,如下所示:“欧元2.5E+2”,“欧元56.95”,“欧元1E+2” 现在,我想再次使它有用,并将其转换为十进制进行进一步计算,但不知道如何做 我尝试按照建议的解决方案来解决这个问题: 但是,我未能将解决方案复制为查询、视图或存储过程,更不用说使其适应我的问题了 我真的希望有人能帮我。 提前谢谢在mysql中将科学记数法从Varchar转换为十进制,mysql,string,casting,decimal,Mysql,String,Casting,Decimal,在mySQL数据库中,数据集中的所有值都存储为varchar,显示欧元金额,如下所示:“欧元2.5E+2”,“欧元56.95”,“欧元1E+2” 现在,我想再次使它有用,并将其转换为十进制进行进一步计算,但不知道如何做 我尝试按照建议的解决方案来解决这个问题: 但是,我未能将解决方案复制为查询、视图或存储过程,更不用说使其适应我的问题了 我真的希望有人能帮我。 提前谢谢 SELECT SUBSTRING_INDEX('EUR 2.5E+2', ' ', -1) + 0; -> 250
SELECT SUBSTRING_INDEX('EUR 2.5E+2', ' ', -1) + 0;
->
250
注意:这假设有一个空格,数值在空格后面。非常感谢Rick James,您的解决方案非常有效。 但是,我更喜欢将子字符串显式转换为十进制:
CAST(SUBSTRING_INDEX(p.amount, ' ', -1) AS DECIMAL(5,2))
现在我可以对结果进行计算(见Rick回答下面的注释)。理想情况下,它不应该是
varchar
。但是,您可能有机会尝试在不使用EUR
的情况下转换,然后,如果需要,再次将其连接回。您是如何陷入这种混乱的?无论如何,删除“EUR”(可能添加0)应该会修正的是的,嗯……当系统建立时,我尝试做的那种分析优先级很低。开发人员说他们会改变它,不过:-Blooks很好,谢谢!然而,减法有令人惊讶的结果。比如,当这个代码重新返回92.06,我减去100,我得到-7.93999999998。这是FLOA的一个普遍问题T和DOUBLE
。这类字段精确到一定数量的有效位;但当转换为十进制时,类似的情况就会发生。您的特定示例获得了3-4位精度;然后转换引入了噪声。关于浮点问题有很多讨论。如果您存储美元/欧元和美分,则useDECIMAL
以避免此类错误。当然,您的答案就是这样做的。为了避免金钱上的舍入错误,请使用DECIMAL
(但要注意5
;确保它足够大。)