如何使用SQL(BigQuery)对数字字符串求和?
在BigQuery中计算超长数字字符串的各位数字之和
嘿,这个需求其实很容易实现,我给你分享两种在BigQuery里常用的方法,都能轻松搞定超长数字字符串的各位求和:
方法一:用SPLIT + UNNEST拆分求和
这是最直接的方式,把字符串拆成单个字符,转成数字后求和:
SELECT SUM(CAST(num AS INT64)) AS total_sum FROM UNNEST(SPLIT('670000000000100000000000000000000000000000000000000000000000000', '')) AS num
原理说明:
SPLIT(字符串, ''):将输入的超长数字字符串按空字符拆分,得到一个包含每个单个数字字符的数组UNNEST():把数组转换成一行一行的记录,每个数字字符占一行CAST(num AS INT64):把字符串类型的数字转换成整数SUM():对所有整数求和,得到最终结果(你的例子里就是6+7+1=14)
方法二:用正则提取 + UNNEST(适合复杂场景)
如果你的字符串里可能混有非数字字符(虽然你现在的输入都是数字,但这个方法更通用),可以用正则提取所有数字后再求和:
SELECT SUM(CAST(num AS INT64)) AS total_sum FROM UNNEST(REGEXP_EXTRACT_ALL('670000000000100000000000000000000000000000000000000000000000000', r'\d')) AS num
原理说明:
REGEXP_EXTRACT_ALL(字符串, r'\d'):用正则表达式提取字符串中所有的单个数字字符,返回数组- 后续的
UNNEST、CAST和SUM操作和方法一完全一致
如果字符串来自表字段的场景
如果你的数字字符串是存储在某个表的字段里(比如表叫your_table,字段叫digit_string),可以用下面的查询批量计算:
SELECT digit_string, SUM(CAST(num AS INT64)) AS total_sum FROM your_table, UNNEST(SPLIT(digit_string, '')) AS num GROUP BY digit_string
这样就能为表中每一行的数字字符串计算各位之和啦!
内容的提问来源于stack exchange,提问作者locket
相关产品推荐
相关产品推荐

