You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery中正确聚合拆分后首字母大写的单词

问题分析与解决方案

你的代码核心问题是错误地使用了UNNEST后的OFFSET作为分组键:OFFSET是每个拆分单词在其所在行数组中的位置,比如第一行的"corki"位置是0,第二行的"dog"位置是0、"corki"位置是1,第三行的"golden"位置是0、"retriever"位置是1。GROUP BY pos会把所有行中同位置的单词聚合到一起,导致结果不符合预期。

下面提供两种可行的解决方案:

方案一:保留原行标识修正分组逻辑

给每一行添加唯一标识,拆分后按原行标识分组,确保同一行的单词被正确聚合:

WITH array_table AS (
  SELECT 1 AS row_id, "corki" AS dog UNION ALL
  SELECT 2, "dog corki" UNION ALL
  SELECT 3, "golden retriever"
),
split_table AS (
  SELECT row_id, SPLIT(dog, " ") AS split_word
  FROM array_table
)
SELECT 
  STRING_AGG(CONCAT(UPPER(SUBSTR(unnest_split_word, 1, 1)), LOWER(SUBSTR(unnest_split_word, 2))), ' ') AS capitalized_dog
FROM 
  split_table,
  UNNEST(split_table.split_word) AS unnest_split_word
GROUP BY row_id
ORDER BY row_id

方案二:用正则表达式简化实现

不需要拆分再聚合,直接通过正则匹配每个单词的首字母并转大写,代码更简洁高效:

WITH array_table AS (
  SELECT "corki" AS dog UNION ALL
  SELECT "dog corki" UNION ALL
  SELECT "golden retriever"
)
SELECT 
  REGEXP_REPLACE(dog, r'\b(\w)', UPPER(r'\1')) AS capitalized_dog
FROM array_table

两种方案都会返回预期结果:

Corki
Dog Corki
Golden Retriever

内容的提问来源于stack exchange,提问作者FastBoi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:01:55