Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql中将科学记数法从Varchar转换为十进制_Mysql_String_Casting_Decimal - Fatal编程技术网

在mysql中将科学记数法从Varchar转换为十进制

在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

在mySQL数据库中,数据集中的所有值都存储为varchar,显示欧元金额,如下所示:“欧元2.5E+2”,“欧元56.95”,“欧元1E+2”

现在,我想再次使它有用,并将其转换为十进制进行进一步计算,但不知道如何做

我尝试按照建议的解决方案来解决这个问题:

但是,我未能将解决方案复制为查询、视图或存储过程,更不用说使其适应我的问题了

我真的希望有人能帮我。 提前谢谢

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位精度;然后转换引入了噪声。关于浮点问题有很多讨论。如果您存储美元/欧元和美分,则use
DECIMAL
以避免此类错误。当然,您的答案就是这样做的。为了避免金钱上的舍入错误,请使用
DECIMAL
(但要注意
5
;确保它足够大。)