PostgreSQL中对字典格式字符串列的值求和方法咨询
PostgreSQL 提取自定义格式字符串中的数值并求和
针对你列中{string_one:1;string_two:2;string_three:3}这种格式的字符串,最优的求和方法是通过正则表达式提取所有数值,再聚合求和,以下是两种高效实现方式:
方法一:直接提取数字并求和
利用regexp_matches全局匹配所有数字,再通过unnest展开结果并求和:
SELECT sum((unnest(regexp_matches(data_col, '\d+', 'g')))::integer) AS total_sum FROM your_table_name;
regexp_matches(..., '\d+', 'g'):全局匹配字符串中所有连续数字,返回包含数字文本的数组unnest:将数组转换为行数据- 转换为
integer类型后用sum完成求和
方法二:清理字符串后转数组求和
先移除字符串中非数字和非分号的字符,再拆分数组求和:
SELECT sum(elem::integer) AS total_sum FROM your_table_name, unnest(string_to_array(regexp_replace(data_col, '[^\d;]', '', 'g'), ';')) AS elem WHERE elem <> '';
regexp_replace(..., '[^\d;]', '', 'g'):移除所有非数字、非分号的字符,得到1;2;3格式的字符串string_to_array:将处理后的字符串按分号拆分为数组unnest展开后过滤空值(避免格式异常导致的错误),最后求和
两种方法中,方法一更简洁高效,因为它直接定位目标数字,无需额外的字符串清理和空值过滤步骤,适合你给出的标准格式场景。
内容的提问来源于stack exchange,提问作者ARC
相关产品推荐
相关产品推荐

