将 MySQL 中的文本转换为数字以允许算术运算符

Convert Text to Number in MySQL to allow arithmetic operators

我正在处理一些蹩脚的数据源(数据存储在另一个数据库中并作为文本推送到我的数据库中,即使它应该存储为整数......情况并非总是如此,但它由于数据源的设置方式而经常发生,不幸的是我不能只更改数据源)。

我想对这些数据执行一些简单的函数,但由于许多值以文本形式存储,算术运算符的结果值为零。

有没有一种方法可以在我的 SQL 查询中将字符串转换为数字,以允许这些函数 return 列总和的值而不是零:

SELECT closeout_sl_dataform.OFS_ID 作为 OFS, ((closeout_sl_dataform.PO1_FE_HRS_CLOSEOUT_SL + closeout_sl_dataform.PO2_FE_HRS_CLOSEOUT_SL) + closeout_sl_dataform.PO3_FE_HRS_CLOSEOUT_SL) AS TOTAL_FE_HOURS, ((closeout_sl_dataform.PO1_FE_COST_CLOSEOUT_SL_USD + closeout_sl_dataform.PO2_FE_COST_CLOSEOUT_SL_USD) + closeout_sl_dataform.PO3_FE_COST_CLOSEOUT_SL_USD) AS TOTAL_FE_COST, ((closeout_sl_dataform.PO1_CRAFT_COST_CLOSEOUT_SL_USD + closeout_sl_dataform.PO2_CRAFT_COST_CLOSEOUT_SL_USD) + closeout_sl_dataform.PO3_CRAFT_COST_CLOSEOUT_SL_USD) AS TOTAL_CRAFT_COST, closeout_sl_dataform.CRANE 作为 TOTAL_CRANE, closeout_sl_dataform.SCAFFOLDING 作为 TOTAL_SCAFF, closeout_sl_dataform.PO1_TOTAL_COST_CLOSEOUT_SL 作为 TOTAL_PO1, closeout_sl_dataform.PO2_TOTAL_COST_CLOSEOUT_SL 作为 TOTAL_PO2, closeout_sl_dataform.PO3_TOTAL_COST_CLOSEOUT_SL 作为 TOTAL_PO3, ((closeout_sl_dataform.PO1_TOTAL_COST_CLOSEOUT_SL + closeout_sl_dataform.PO2_TOTAL_COST_CLOSEOUT_SL) + closeout_sl_dataform.PO3_TOTAL_COST_CLOSEOUT_SL) AS SUMPO123 来自 closeout_sl_dataform

就像现在一样,TOTAL_FE_HOURS 大多数时候的结果为 0,因为表达式中的值是文本类型而不是整数。我的表都具有 VARCHAR 列值,以便接受这些值,无论它们在原始数据源中设置为整数还是数字。

感谢您的帮助!我是 SQL 的新手,虽然我确定这可能是微不足道的,但我正在跌跌撞撞地尝试自己弄清楚。

我相信您需要添加到每个字符串到数字字段的代码片段是 CONVERT(SUBSTRING_INDEX(field,'-',-1),UNSIGNED INTEGER)。例如:

CAST(REPLACE(REPLACE(IFNULL(closeout_sl_dataform.PO1_FE_HRS_CLOSEOUT_SL,0),',',''),'$','') AS DECIMAL(10,2)) +  
CAST(REPLACE(REPLACE(IFNULL(closeout_sl_dataform.PO2_FE_HRS_CLOSEOUT_SL,0),',',''),'$','') AS DECIMAL(10,2)) +  
CAST(REPLACE(REPLACE(IFNULL(closeout_sl_dataform.PO3_FE_HRS_CLOSEOUT_SL,0),',',''),'$','') AS DECIMAL(10,2)) AS TOTAL_FE_HOURS