【问题标题】:How to convert percent 56.67% (string data type) as float64如何将百分比 56.67%(字符串数据类型)转换为 float64
【发布时间】:2020-07-28 05:44:34
【问题描述】:

我需要转换显示为 56.67%(字符串数据类型)的数据。我需要将其转换为 FLOAT64。我做不到。谁能帮忙。

【问题讨论】:

  • 明确预期输出
  • 我想得到 0.5667
  • 这个极其简单!你自己尝试过什么吗?向我们展示你的努力。
  • 我使用 cast(data as Float64) 作为数据。但它显示了一个错误
  • 好的。那么接下来的尝试是什么?还是你就放弃了?

标签: google-bigquery


【解决方案1】:

在下面使用

SAFE_CAST(REPLACE(data, '%', '') AS Float64)/100

【讨论】:

    【解决方案2】:

    一些替代方案:

    SELECT SAFE_CAST(x AS FLOAT64)
      , CAST(REGEXP_EXTRACT(x, r'[0-9\.\-]*') AS FLOAT64)
      , CAST(REGEXP_EXTRACT(x, r'[0-9\.\-]*') AS FLOAT64)/100
      , CAST(REGEXP_EXTRACT(x, r'[0-9\.\-]*') AS NUMERIC)/100
    FROM (
      SELECT "56.67%" x
      UNION ALL
      SELECT "1.001%" 
    )
    

    结果:

    null
    56.67
    0.5667
    0.5667
    
    null
    1.001
    0.010009999999999998
    0.01001
    

    如上所示,FLOAT64 可能会表现出一些“奇怪”的行为,而 NUMERIC 可以在这些情况下提供帮助。

    【讨论】:

      【解决方案3】:

      为了进一步为社区做出贡献,除了 Felipe Hoffa 和 Mikhail Berlyant 的回答。我会建议他们的答案略有不同。

      BigQuery 支持用户定义函数 (UDF),它允许您使用 SQL 或 JavaScript 创建函数。当您需要将列作为输入传递、执行一些操作并将结果作为值返回时,它非常有用。下面的方法使用UDF和REGEXP_EXTRACT()内置方法,

      CREATE TEMP FUNCTION format_float(x STRING) AS (
      CAST(regexp_extract(x, r'.*[^\%]') as float64)/100
      );
      
      with data as (
      select "55.58%" as percentage UNION ALL
      select "60.01%" as percentage
      )
      
      select format_float(percentage) as new_percentage from data
      

      和输出,

      Row new_percentage
      1   0.5558
      2   0.6001
      

      请注意,函数 format_float 在 select 中使用。此外,正则表达式使用 .* 加上 negative look ahead,这意味着它将匹配除 % 符号。然后将该值转换为 float64 并除以 100 以便进行相应的格式化。

      注意:如果需要,您可以按照与上述相同的语法将任何其他提供的答案包装在 UDF 中。

      【讨论】:

        猜你喜欢
        • 2022-08-03
        • 2019-05-02
        • 2021-12-02
        • 2012-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-09
        • 1970-01-01
        相关资源
        最近更新 更多