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

PostgreSQL中从marc表tag字段提取指定子串的技术求助

解决方案

针对你的需求,我们可以通过正则表达式精准提取|a和|d对应的内容并拼接,以下是适配常见数据库的实现方式:

核心思路

  1. 定位|a后到|d前的文本片段,去除末尾多余空格
  2. 定位|d后到下一个|前的文本片段
  3. 将两个片段直接拼接得到目标格式

PostgreSQL 实现

SELECT
  TRIM(TRAILING ' ' FROM REGEXP_MATCH(tag, '^"\\|a (.*?)\\|d')[1]) || REGEXP_MATCH(tag, '\\|d (.*?)\\|')[1] AS result
FROM marc
WHERE id = '10825700016';

或者用更简洁的单次正则匹配拼接:

SELECT
  REGEXP_REPLACE(tag, '^"\\|a (.*?)\\s*\\|d (.*?)\\|.*', '\1\2') AS result
FROM marc
WHERE id = '10825700016';

MySQL 实现

SELECT
  TRIM(TRAILING ' ' FROM REGEXP_SUBSTR(tag, '\\|a (.*?)\\|d', 1, 1, 's', 1)) || REGEXP_SUBSTR(tag, '\\|d (.*?)\\|', 1, 1, 's', 1) AS result
FROM marc
WHERE id = '10825700016';

原语句问题说明

你之前使用的正则(.*)_[^|][^a][^d]*$完全不符合目标文本的结构:既没有定位到|a和|d的标记位,也没有匹配到需要提取的内容区间,因此无法得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:32:23