【问题标题】:How to cast float to string with no exponents in BigQuery如何在 BigQuery 中将浮点数转换为没有指数的字符串
【发布时间】:2019-11-20 03:24:00
【问题描述】:

我的 BigQuery 表中有浮点数据,例如 5302014.2 和 5102014.4。

我想运行一个 BigQuery SQL,它以字符串格式返回值,但下面的 SQL 会产生这个结果:

select a, string(a) from my_table

5302014.2    "5.30201e+06"
5102014.4    "5.10201e+06"

如何重写我的 SQL 以返回:

5302014.2    "5302014.2"
5102014.4    "5102014.4"

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    使用标准SQL没有问题

    $ bq query '#standardSQL
    SELECT a, CAST(a AS STRING) AS a_str FROM UNNEST(ARRAY[530201111114.2, 5302014.4]) a'
    +-------------------+----------------+
    |         a         |     a_str      |
    +-------------------+----------------+
    |         5302014.4 | 5302014.4      |
    | 5.302011111142E11 | 530201111114.2 |
    +-------------------+----------------+
    

    【讨论】:

      【解决方案2】:
      SELECT STRING(INTEGER(f)) + '.' + SUBSTR(STRING(f-INTEGER(f)), 3)
      FROM (SELECT 5302014.5642 f)
      

      (不是一个很好的 hack,但更好的方法是在 https://code.google.com/p/google-bigquery/issues/list?can=2&q=label%3DFeature-Request 发布一个很棒的功能请求)

      【讨论】:

        【解决方案3】:

        就使用 GBQ 而言,将旧 sql 转换为标准 sql 确实是前进的最佳方式。标准 sql 速度更快,并且具有更好的功能实现方式。

        对于您的用例,最好使用带有 CAST(a AS STRING) 的标准 sql。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-14
          • 1970-01-01
          • 2011-11-25
          • 2020-09-14
          • 1970-01-01
          • 2018-02-15
          • 2011-12-18
          相关资源
          最近更新 更多