是否有可用的FORMAT_STRING或TEXT函数?

Ste*_*rer 1 google-bigquery

大约两年前,我还看过另一篇有关FORMAT_STRING的文章。我正在寻找类似的内容,因此,如果我有一个字符串,如123456789,我将能够对其进行格式化以包括适当的逗号,使其看起来像123,456,789

在Google表格中,有一个TEXT函数可以启用多种格式。如果要在Google表格中执行此操作,则可以=TEXT("123456789", "#,##0")。是否有某个功能或计划具有一个功能来启用文本格式设置(例如Google表格TEXT功能中存在的功能)?在许多情况下,当我创建报表并需要将FLOAT或INTEGER数据格式化为字符串以便与其他字段连接时,这会派上用场,而在适当的地方仍保留逗号或百分比。

Mik*_*ant 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,')
  });
}"
)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,在最近引入的标准SQL方言中-您可以使用FORMAT()函数。
像下面的例子一样。
别忘了取消Use Legacy SQL选中下面的复选框Show Options

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
)
Run Code Online (Sandbox Code Playgroud)

或浮子

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
)
Run Code Online (Sandbox Code Playgroud)