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

如何拆分逗号分隔字符串并从JSON列custom_fields提取指定字段?

从JSON列提取指定字段(基于逗号分隔的字段名列表)

问题说明

我有一个逗号分隔的字符串"First_Name, Last_Name, Age",其中的内容是需要从表my_table的JSON列custom_fields中提取的字段名。需要拆分该字符串,提取对应JSON字段并得到格式化输出。

示例JSON列数据

custom_fields
{
"First_Name": "Vaibhav",
"Last_Name": "Terli",
"Age": "24"
}

期望输出

First_Name | Last_Name | Age
---------------------------
Vaibhav   | Terli     | 24

解决方案

不同数据库的JSON处理语法不同,以下是主流数据库的实现方式:

1. PostgreSQL

静态提取(字段名固定时)

直接通过->>操作符提取指定字段:

SELECT
  custom_fields->>'First_Name' AS "First_Name",
  custom_fields->>'Last_Name' AS "Last_Name",
  custom_fields->>'Age' AS "Age"
FROM my_table;

动态提取(基于传入的逗号分隔字符串)

通过PL/pgSQL函数实现动态生成查询:

CREATE OR REPLACE FUNCTION extract_json_fields(field_list text)
RETURNS TABLE (result record) AS $$
DECLARE
  fields text[];
  query text;
BEGIN
  -- 拆分并清理字段列表
  fields := string_to_array(trim(both '"' from field_list), ', ');
  -- 拼接查询语句
  query := 'SELECT ' || string_agg('custom_fields->>' || quote_literal(f) || ' AS ' || quote_ident(f), ', ') || ' FROM my_table';
  RETURN QUERY EXECUTE query;
END;
$$ LANGUAGE plpgsql;

-- 调用函数
SELECT * FROM extract_json_fields('"First_Name, Last_Name, Age"');

2. MySQL

静态提取

使用->>操作符提取JSON路径对应的字段:

SELECT
  custom_fields->>'$.First_Name' AS First_Name,
  custom_fields->>'$.Last_Name' AS Last_Name,
  custom_fields->>'$.Age' AS Age
FROM my_table;

动态提取

通过预处理语句动态生成查询:

SET @field_list = 'First_Name, Last_Name, Age';
-- 拼接字段提取语句
SET @fields = CONCAT(REPLACE(@field_list, ', ', '->>\'$.\', '), '->>\'$.\'');
SET @query = CONCAT('SELECT ', @fields, ' FROM my_table');
-- 执行动态查询
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

3. SQL Server

静态提取

用JSON_VALUE函数提取指定路径的字段值:

SELECT
  JSON_VALUE(custom_fields, '$.First_Name') AS First_Name,
  JSON_VALUE(custom_fields, '$.Last_Name') AS Last_Name,
  JSON_VALUE(custom_fields, '$.Age') AS Age
FROM my_table;

动态提取

通过动态SQL结合STRING_SPLIT实现:

DECLARE @field_list NVARCHAR(MAX) = 'First_Name, Last_Name, Age';
DECLARE @fields NVARCHAR(MAX);

-- 拆分字段列表并拼接提取语句
SELECT @fields = STRING_AGG('JSON_VALUE(custom_fields, ''$.' + TRIM(value) + ''') AS ' + QUOTENAME(TRIM(value)), ', ')
FROM STRING_SPLIT(@field_list, ',');

-- 执行动态查询
DECLARE @query NVARCHAR(MAX) = 'SELECT ' + @fields + ' FROM my_table';
EXEC sp_executesql @query;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:02:46