【问题标题】:Convert Text to Number in MySQL to allow arithmetic operators在 MySQL 中将文本转换为数字以允许算术运算符
【发布时间】:2015-05-22 16:30:27
【问题描述】:

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

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

有没有办法可以在我的 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) 如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) 如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) 如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 FROM closeout_sl_dataform

就像现在一样,TOTAL_FE_HOURS 在大多数情况下会产生 0 值,因为表达式中的值是文本类型而不是整数。我的表都有 VARCHAR 的列值,以便接受在原始数据源中设置为整数或数字的值。

感谢您的帮助!我是 SQL 的新手,虽然我确信这可能是微不足道的,但我正在尝试自己解决这个问题。

【问题讨论】:

  • 是什么阻碍了你根据这些文本的输入来启动你设计的影子数据库?
  • 我在目前的职位上还有两周的时间在公司担任新职位之前,希望能有一个快速的解决方案,让我能够解决我之前越来越多的“待办事项”继续前进:)

标签: mysql arithmetic-expressions


【解决方案1】:

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

【讨论】:

  • 谢谢 stitzelj,符号会有所作为吗?现在列中的值被格式化为 $xx,xxx。
  • 是的,它会的。我已经用更新的语法编辑了上面的答案。
猜你喜欢
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多