我正在处理一些糟糕的数据源(数据存储在另一个数据库中并作为文本推送到我的数据库中,即使它应该存储为整数...但情况并非总是如此,但它正在发生经常由于数据源的设置方式,不幸的是我不能只改变数据源)。
我想对这些数据执行一些简单的函数,但由于许多值存储为文本,因此算术运算符的结果值为零。
有没有办法可以将字符串转换为我的SQL查询中的数字,以允许这些函数返回列的总和而不是零的值:
选择
closeout_sl_dataform
。OFS_ID
AS 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
AS TOTAL_CRANE
,
closeout_sl_dataform
。SCAFFOLDING
AS TOTAL_SCAFF
,
closeout_sl_dataform
。PO1_TOTAL_COST_CLOSEOUT_SL
AS TOTAL_PO1
,
closeout_sl_dataform
。PO2_TOTAL_COST_CLOSEOUT_SL
AS TOTAL_PO2
,
closeout_sl_dataform
。PO3_TOTAL_COST_CLOSEOUT_SL
AS 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,虽然我确信这可能是微不足道的,但我仍然磕磕绊绊想要自己解决这个问题。
答案 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