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

如何在PostgreSQL中提取到cardSlot部分的左侧字符串

PostgreSQL 提取字符串至cardSlot编号段的通用查询方法

需求明确:需要从eq1.sources列的字符串中,提取从开头到cardSlot-<编号>为止的部分,无论后续是否有:card或:card:daughterCard...这类后缀。

方法1:正则表达式匹配(最简洁)

利用PostgreSQL的正则表达式substring函数,直接匹配到cardSlot-后跟数字的结尾部分:

SELECT substring(eq1.sources FROM '^.*:cardSlot-\d+') AS extracted_source
FROM eq1;
  • 正则说明:
    • ^ 匹配字符串开头
    • .* 匹配任意字符(尽可能多,确保覆盖到最后一个:前的内容)
    • :cardSlot-\d+ 匹配cardSlot-后跟至少一个数字的部分,这正是我们要保留的最后一段

方法2:拆分字符串后聚合(更直观,适合复杂结构扩展)

如果需要更灵活的处理,可以先将字符串按:拆分,找到包含cardSlot的分段位置,再将前面的分段重新拼接:

SELECT 
  string_agg(part, ':' ORDER BY idx) AS extracted_source
FROM eq1,
  unnest(string_to_array(eq1.sources, ':')) WITH ORDINALITY AS parts(part, idx)
WHERE idx <= (SELECT idx FROM parts WHERE part LIKE 'cardSlot-%')
GROUP BY eq1.sources;
  • 步骤说明:
    1. string_to_array把原字符串按:拆分成数组
    2. unnest...WITH ORDINALITY将数组转为带索引的行
    3. 子查询找到cardSlot-所在的分段索引
    4. string_agg将索引小于等于目标索引的分段重新用:拼接

这两种方法都能适配所有给定的情况,无需依赖特定的后缀字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:11:11