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

PostgreSQL正则表达式需求:由Column A生成目标Column B

PostgreSQL 提取特定字段生成 Column B 解决方案

根据你的需求,核心是从 Column A 中提取URVKK和所有出现的GPA子串,并用下划线连接。以下是具体实现方案:

实现逻辑

  1. 提取开头的URVKK部分:无论URVKK后跟着数字或其他字符,仅保留开头的URVKK。
  2. 提取所有GPA子串:全局匹配 Column A 中所有的GPA(支持大小写统一转换)。
  3. 将提取到的URVKK和所有GPA用下划线拼接,得到 Column B。

示例 SQL 代码

SELECT
    column_a,
    CONCAT(
        -- 提取开头的URVKK部分
        regexp_replace(upper(column_a), '^(URVKK).*', '\1'),
        -- 拼接所有匹配到的GPA
        '_',
        string_agg(match, '_')
    ) AS column_b
FROM
    your_table,
    -- 全局匹配所有GPA(转大写确保不遗漏小写的gpa)
    regexp_matches(upper(column_a), 'GPA', 'g') AS matches(match)
GROUP BY
    column_a;

代码说明

  • upper(column_a):将输入统一转为大写,避免因大小写差异漏匹配gpa或Gpa。
  • regexp_replace(upper(column_a), '^(URVKK).*', '\1'):匹配开头的URVKK并保留,忽略后续所有字符。
  • regexp_matches(upper(column_a), 'GPA', 'g'):全局匹配所有GPA子串,返回所有匹配结果。
  • string_agg(match, '_'):将所有匹配到的GPA用下划线连接成字符串。
  • CONCAT(...):将URVKK和拼接后的GPA字符串再次用下划线连接,得到最终的 Column B。

无 GPA 场景的兼容处理

如果存在 Column A 中没有GPA的情况,可以用LEFT JOIN LATERAL和COALESCE避免拼接出错:

SELECT
    column_a,
    CONCAT(
        regexp_replace(upper(column_a), '^(URVKK).*', '\1'),
        COALESCE('_' || string_agg(match, '_'), '')
    ) AS column_b
FROM
    your_table
LEFT JOIN LATERAL regexp_matches(upper(column_a), 'GPA', 'g') AS matches(match) ON true
GROUP BY
    column_a;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:25:32