我正在处理一些糟糕的数据源(这些数据存储在另一个数据库中,并以文本形式推入我的数据库,尽管它应该作为整数存储.这种情况并非总是如此,但由于数据源的设置方式,这种情况经常发生,不幸的是,我不能仅仅更改数据源)。
我想对这个数据执行一些简单的函数,但是由于许多值被存储为文本,算术运算符的结果值为零。
是否有一种方法可以将字符串转换为SQL查询中的数字,以允许这些函数返回列和的值而不是零:
选择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
)作为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
作为D16,(D17.D18+closeout_sl_dataform.D20+D21<代码代码代码代码><代码>代码>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_SCAFF>D38,(closeout_sl_dataform.PO1_TOTAL_COST_CLOSEOUT_SL+closeout_sl_dataform.PO2_TOTAL_COST_CLOSEOUT_SL+closeout_sl_dataform.PO3_TOTAL_COST_CLOSEOUT_SL从closeout_sl_dataform中SUMPO123
现在的情况是,由于表达式中的值是文本类型而不是整数,所以大多数情况下TOTAL_FE_HOURS的值为0。我的表都有VARCHAR的列值,以便接受原始数据源中将它们设置为整数或数值的值。
我很感激你的帮助!我在SQL方面是个新手,虽然我确信这可能是微不足道的,但我在试图自己解决这个问题时犹豫不决。
发布于 2015-05-22 08:45:28
我相信您需要在每个字符串到数字字段中添加的代码片段是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
https://stackoverflow.com/questions/30401718
复制相似问题