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

PostgreSQL查询:如何从资产表自定义字段中提取指定字段值?

提取PostgreSQL自定义字段中指定键的值

我有一个资产数据库,不同类型的资产对应一组独特的自定义字段。现有查询返回如下结果:

asset_idasset_typecustom_fields
123Type A"BreakdownProvider"="CompanyC","SerialNo"="1234","Model"="ABC"
456Type B"SerialNo"="567","Model"="XYZ","BreakdownProvider"="CompanyD"
789Type C"Model"="ModelA","Capacity"="120kg"
321Type C"Model"="ModelB","Capacity"="240kg"

需要编写PostgreSQL查询,仅提取指定自定义字段(如Model)的值,生成如下格式的结果:

asset_idasset_typemodel
123Type AABC
456Type BXYZ
789Type CModelA
321Type CModelB

解决方案

方法1:使用正则表达式提取

直接通过substring函数配合正则表达式匹配Model字段的值:

SELECT
    asset_id,
    asset_type,
    substring(custom_fields FROM '"Model"="([^"]+)"') AS model
FROM
    your_table_name;

说明:正则表达式"Model"="([^"]+)"会精准匹配"Model"="开头的片段,捕获从下一个字符到下一个双引号之间的内容,也就是Model对应的值。

方法2:转换为JSON格式提取

先将非标准的键值对字符串转换为标准JSON,再用JSON函数提取目标字段:

SELECT
    asset_id,
    asset_type,
    (replace(replace(custom_fields, '"=', '":'), ',"', ',"'))::json ->> 'Model' AS model
FROM
    your_table_name;

说明:

  1. 第一次replace把"key"="value"替换为"key":"value",符合JSON键值对格式
  2. 第二次replace确保逗号分隔的格式正确(原数据已满足,此步为兼容可能的异常格式)
  3. 转换为JSON类型后,用->>操作符提取Model字段的文本值

两种方法都会在资产没有Model字段时返回NULL,符合业务预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:19:51