在MySQL中将Text转换为Number以允许算术运算符

时间:2015-05-22 16:30:27

标签: mysql arithmetic-expressions

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

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

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

选择   closeout_sl_dataformOFS_ID AS OFS,   ((closeout_sl_dataformPO1_FE_HRS_CLOSEOUT_SL + closeout_sl_dataformPO2_FE_HRS_CLOSEOUT_SL)+ closeout_sl_dataformPO3_FE_HRS_CLOSEOUT_SL)AS TOTAL_FE_HOURS,   ((closeout_sl_dataformPO1_FE_COST_CLOSEOUT_SL_USD + closeout_sl_dataformPO2_FE_COST_CLOSEOUT_SL_USD)+ closeout_sl_dataformPO3_FE_COST_CLOSEOUT_SL_USD)AS TOTAL_FE_COST,   ((closeout_sl_dataformPO1_CRAFT_COST_CLOSEOUT_SL_USD + closeout_sl_dataformPO2_CRAFT_COST_CLOSEOUT_SL_USD)+ closeout_sl_dataformPO3_CRAFT_COST_CLOSEOUT_SL_USD)AS TOTAL_CRAFT_COST,   closeout_sl_dataformCRANE AS TOTAL_CRANE,   closeout_sl_dataformSCAFFOLDING AS TOTAL_SCAFF,   closeout_sl_dataformPO1_TOTAL_COST_CLOSEOUT_SL AS TOTAL_PO1,   closeout_sl_dataformPO2_TOTAL_COST_CLOSEOUT_SL AS TOTAL_PO2,   closeout_sl_dataformPO3_TOTAL_COST_CLOSEOUT_SL AS TOTAL_PO3,   ((closeout_sl_dataformPO1_TOTAL_COST_CLOSEOUT_SL + closeout_sl_dataformPO2_TOTAL_COST_CLOSEOUT_SL)+ closeout_sl_dataformPO3_TOTAL_COST_CLOSEOUT_SL)AS SUMPO123 来自closeout_sl_dataform

就像现在一样,由于表达式中的值是文本类型而不是整数,TOTAL_FE_HOURS在大多数情况下导致值为0。我的表都具有VARCHAR的列值,以便接受它们在原始数据源中是设置为整数还是数值的值。

我很感激帮助!我非常喜欢SQL,虽然我确信这可能是微不足道的,但我仍然磕磕绊绊想要自己解决这个问题。

1 个答案:

答案 0 :(得分:0)

我相信您需要添加到每个字符串到数字字段的代码片段为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