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

如何在PostgreSQL中提取指定分隔符间的目标数字子串

PostgreSQL提取指定位置数字的解决方案

场景说明

你的数据是存储在PostgreSQL中的JSON格式字符串,需要提取"statut_alpha"字段前一个键对应的数字值。


方法1:字段为文本类型(text/varchar)

利用PostgreSQL正则表达式函数直接提取目标数字:

方式A:用regexp_match精准捕获

SELECT (regexp_match(your_column, '"([^"]+)"\s*:\s*"(\d+)"\s*,"statut_alpha"'))[2] AS target_number
FROM your_table;
  • 正则逻辑:匹配任意键名 + 冒号 + 数字值 + 紧跟的","statut_alpha",直接捕获数字部分
  • 如需转成数值类型,可追加::int:
SELECT (regexp_match(your_column, '"([^"]+)"\s*:\s*"(\d+)"\s*,"statut_alpha"'))[2]::int AS target_number
FROM your_table;

方式B:用regexp_replace直接提取

SELECT regexp_replace(your_column, '.*:\s*"(\d+)"\s*,"statut_alpha".*', '\1') AS target_number
FROM your_table;
  • 逻辑:匹配整个字符串,仅保留","statut_alpha"前的数字片段

方法2:字段为JSON/JSONB类型(更稳定)

如果字段是标准JSON/JSONB类型,优先用原生JSON函数处理,避免格式变动导致的错误:

SELECT 
  your_column ->> (
    SELECT key 
    FROM jsonb_object_keys(your_column::jsonb) 
    WHERE key NOT IN ('code_partenaire', 'statut_alpha')
  ) AS target_number
FROM your_table;
  • 逻辑:先筛选出除code_partenaire和statut_alpha外的目标键,再提取对应的值
  • 转数值类型可追加::int:
SELECT 
  (your_column ->> (
    SELECT key 
    FROM jsonb_object_keys(your_column::jsonb) 
    WHERE key NOT IN ('code_partenaire', 'statut_alpha')
  ))::int AS target_number
FROM your_table;

测试结果

用你提供的示例数据验证,两种方法均可得到预期输出:

  • 1
  • 1782
  • 17

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:05:21