【问题标题】:Issue with casting String to decimal in MySQL在 MySQL 中将字符串转换为十进制的问题
【发布时间】:2018-01-30 16:23:37
【问题描述】:

我在数据集中有一列,其中包含货币指标和该货币的相应金额(即 35,000.05 美元)。我正在尝试获取包含数字的列的子字符串并将其转换为小数。但是,每当我转换它时,它只会返回我想要获取的数字的前两位数字。

例如,会发生这种情况:

在这个示例中,这是我的查询:

    SELECT 
       SUBSTRING(`Annualized Opportunity Amount`,1,3) as `test1`,
       (SUBSTRING(`Annualized Opportunity Amount`,5)) as test2,
       case when SUBSTRING(`Annualized Opportunity Amount`,1,3) = 'AUD' 
              then CAST(SUBSTRING(`Annualized Opportunity Amount`,5) AS DECIMAL(10,2)) 
       else 0 END as `test3`
    from annualized_opportunity_revenue

是否有任何理由说明为什么在 test3 中只返回 test2 列的前 2 位数字?结果值的子字符串是相同的,所以我不明白为什么转换它会改变数据。

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 去掉子字符串中的逗号有帮助吗?
  • 您需要先替换,12,345 不是数字。将数字存储为数字,则没有问题。
  • 试试select cast(replace(dacolumn, ',' , '') as decimal(10,2))
  • 哇,没想到。完全有道理。

标签: mysql sql casting


【解决方案1】:

在将字符串转换为数字之前,您必须从字符串中删除逗号:

CAST(SUBSTRING(REPLACE(`Annualized Opportunity Amount`,',',''),5) AS DECIMAL(10,2))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2022-07-22
    • 2019-08-19
    • 2023-02-08
    • 1970-01-01
    相关资源
    最近更新 更多