【问题标题】:Format a number to have commas (1000000 -> 1,000,000)将数字格式化为逗号 (1000000 -> 1,000,000)
【发布时间】:2017-01-14 12:44:38
【问题描述】:

在 Bigquery 中:我们如何格式化将成为结果集一部分的数字以使用逗号格式化:比如 1000000 到 1,000,000?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    以下是标准 SQL

    SELECT 
      input,
      FORMAT("%'d", input) as formatted
    FROM (
      SELECT 123 AS input UNION ALL 
      SELECT 1234 AS input UNION ALL
      SELECT 12345 AS input UNION ALL
      SELECT 123456 AS input UNION ALL
      SELECT 1234567 AS input UNION ALL
      SELECT 12345678 AS input UNION ALL
      SELECT 123456789 AS input
    )
    

    非常适合整数,但如果你也需要浮点数,你可以使用:

    SELECT 
      input,
      CONCAT(FORMAT("%'d", CAST(input AS int64)), 
             SUBSTR(FORMAT("%.2f", CAST(input AS float64)), -3)) as formatted
    FROM (
      SELECT 123 AS input UNION ALL 
      SELECT 1234 AS input UNION ALL
      SELECT 12345 AS input UNION ALL
      SELECT 123456.1 AS input UNION ALL
      SELECT 1234567.12 AS input UNION ALL
      SELECT 12345678.123 AS input UNION ALL
      SELECT 123456789.1234 AS input
    )
    

    为旧版 SQL 添加

    顺便说一句,如果您因某种原因被绑定到旧版 SQL - 下面是它的快速示例

    SELECT input, formatted
    FROM JS((
      SELECT input
      FROM 
        (SELECT 123 AS input ),
        (SELECT 1234 AS input ),
        (SELECT 12345 AS input ),
        (SELECT 123456 AS input ),
        (SELECT 1234567 AS input ),
        (SELECT 12345678 AS input ),
        (SELECT 123456789 AS input)
      ),
      // input
      input,
      // output
      "[
      {name: 'input', type:'integer'},
      {name: 'formatted', type:'string'}
      ]",
      // function
      "function (r, emit) {
        emit({
          input: r.input,
          formatted: r.input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') 
        });
      }"
    )
    

    以上示例使用 Legacy SQL User-Defined Functions 的内联版本,通常用于快速演示/示例 - 但不建议在生产中使用 - 如果您觉得它对您有用 - 您需要“非常轻微地”转换它 -以https://cloud.google.com/bigquery/user-defined-functions#webui为例

    【讨论】:

      【解决方案2】:

      使用标准 SQL:

      SELECT FORMAT("%'d", 1000123)
      
      1,000,123   
      

      启用标准 SQL 的说明:https://cloud.google.com/bigquery/sql-reference/enabling-standard-sql

      【讨论】:

        【解决方案3】:

        改进 Mikhail 对浮动会话的回答 CAST(input AS int64) 将使像 12345.5 这样的数字在输出中变为 12346.50。 我将使用“。”分割。获取数字的整数部分,然后转换为 int64。

        CREATE TEMP FUNCTION
          format_n(x float64) AS (CONCAT(FORMAT("%'d", CAST(SPLIT(CAST(x AS string), '.')[
                OFFSET
                  (0)] AS int64)),SUBSTR(FORMAT("%.2f", x), -3)));
        SELECT
          input,
          format_n(input)
        FROM (
          SELECT
            123 AS input
          UNION ALL
          SELECT
            1234 AS input
          UNION ALL
          SELECT
            12345 AS input
          UNION ALL
          SELECT
            123456.8 AS input
          UNION ALL
          SELECT
            1234567.12 AS input
          UNION ALL
          SELECT
            12345678.127 AS input
          UNION ALL
          SELECT
            123456789.1234 AS input )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-06
          • 2012-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-24
          • 2014-05-31
          • 2020-12-18
          相关资源
          最近更新 更多