有一个有效的FORMAT_STRING或TEXT函数吗?

时间:2016-05-08 02:14:59

标签: google-bigquery

大约两年前我见过关于可能的FORMAT_STRING的another post。我正在寻找类似这样的东西,所以如果我有一个像123456789这样的字符串,我可以格式化它以包含适当的逗号,看起来像123,456,789

在Google表格中,有一个TEXT功能可以实现各种格式化。如果我在Google表格中这样做,我可以做=TEXT("123456789", "#,##0")。是否有功能或计划具有启用文本格式的功能,例如Google表格文字功能中存在的内容?在很多情况下,当我创建报告并且需要将FLOAT或INTEGER数据格式化为字符串以便与其他字段连接时,这会派上用场,但仍然会在适当的地方保留逗号或百分比。

1 个答案:

答案 0 :(得分:5)

当我确实需要在BigQuery中执行此操作(创建报告)时,我正在使用以下方法(简化示例)

SELECT input, output FROM JS(
// input table 
(
  SELECT input FROM 
    (SELECT 123 AS input), 
    (SELECT 1234 AS input), 
    (SELECT 12345 AS input), 
    (SELECT 123456.1 AS input), 
    (SELECT 1234567.12 AS input), 
    (SELECT 12345678.123 AS input),
    (SELECT 123456789.123 AS input)
), 
// input columns
  input,
// output schema
"[
  {name: 'input', type: 'float'},
  {name: 'output', type: 'string'}
]",
// function
"function(r, emit){
  emit({
    input: r.input,
    output: r.input.toFixed(2).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,')
  });
}"
)

顺便说一句,在最近推出的标准SQL方言中 - 您可以使用FORMAT()功能 如下例所示。
不要忘记取消选中显示选项

下的Use Legacy SQL复选框
SELECT 
  input,
  FORMAT("%'d", input) AS output
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)) 
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
)