SQL json_table 行转列方法

把一个逗号分隔的字符串拆成多行
sql 复制代码
select t.coins , jt.coin
     from (select 'BTC,ETH,BCH,ETC,TUSDT,ORDI,NEO' coins) t
     join json_table(
            concat('["', replace(t.coins, ',', '","'), '"]'),
            '$[*]' columns(coin varchar(100) path '$')
     ) as jt
sql 复制代码
json_table(
    <json_文档>,          -- ①
    <根路径>              -- ②
    columns(
        <列名> <类型> path '<列路径>',  -- ③
        ...
    )
)

三个参数分别控制:数据源、遍历粒度、输出列。

步骤 1: 把逗号字符串转成 JSON 数组

sql 复制代码
concat('["', replace(t.coins, ',', '","'), '"]')
-- replace:  'BTC,ETH,SOL' → 'BTC","ETH","SOL'
-- concat:   → '["BTC","ETH","SOL"]'

步骤 2: json_table 摊开 JSON 数组

sql 复制代码
json_table(
    '["BTC","ETH","SOL"]',   -- 参数①:JSON 文档
    '$[*]'                   -- 参数②:根路径 = "数组中每个元素"
    columns(
        coin varchar(100) path '$'  -- 参数③:每行输出一列 coin,值=当前元素
    )
) as jt

参数值含义

  • ① JSON 文档 ["BTC","ETH","SOL"] 要解析的 JSON
  • ② 根路径 $[*] 遍历数组每个元素 3 个元素 → 产 3 行
  • ③ path $ 取当前元素本身 相对路径,$ = 当前迭代项

输出结果(jt 表):

sql 复制代码
coin
----
BTC
ETH
SOL

步骤 3: JOIN 形成最终结果

json_table 是 LATERAL JOIN 语义------左侧每一行,右侧展开出多行。最终:

t.coins jt.coin
BTC,ETH,SOL BTC
BTC,ETH,SOL ETH
BTC,ETH,SOL SOL

关键点解释:

概念 说明
$[*] 数组级别遍历------N 个元素产生 N 行
path '$' 列级别取值------$ 是相对于根路径的,即当前元素的值
嵌套对象 如果数组里是对象 {"name":"a"},{"name":"b"},可以用 path '$.name' 提取字段
等价关系 相当于 MySQL 的 JSON_TABLE()、Oracle 的 JSON_TABLE、StarRocks 原生支持
json DEMO 1
sql 复制代码
json_table(
    '[{"name":"BTC","price":50000},{"name":"ETH","price":3000}]',
    '$[*]'
    columns(
        name  varchar(100) path '$.name',
        price decimal(18,2) path '$.price'
    )
)
-- 输出: name=BTC,price=50000 / name=ETH,price=3000
嵌套DEMO 2
bash 复制代码
json_table(
    doc,
    '$' columns(
        id int path '$.id',
        nested path '$.items[*]' columns(
            item_name varchar(100) path '$.name'
        )
    )
)
相关推荐
Decay__1 小时前
21_MySQL 优化案例集 —— 慢 SQL 优化、索引重构与参数调整收益对比
运维·数据库·sql·mysql·架构
挖掘狂人2 小时前
MySQL 深分页优化:limit 100000, 10 慢在哪,怎么救
后端·sql·mysql
codigger2 小时前
MySQL 深分页优化:limit 100000, 10 慢在哪,怎么救
数据库·sql·mysql·程序员
Francek Chen2 小时前
【大数据处理与分析】数据仓库Hive:09 Hive 编程实践
大数据·数据仓库·hive·hadoop·sql
麦壳饼2 小时前
SonnetDB 5.0 正式发布:增强 SQL 与事务,开放九模型 MCP 读写
数据库·人工智能·sql·sonnetdb
Decay__11 小时前
18_MySQL 智能巡检方案 —— 巡检项清单 / 一键巡检脚本 / 健康评分
运维·数据库·sql·mysql·架构
凤凰院凶涛QAQ13 小时前
《MySQL内核拆解:从SQL到InnoDB》(四) : 联合查询 & 视图
数据库·sql·mysql
Decay__1 天前
19_MySQL 告警与自动化运维 —— 告警分级收敛 / Webhook / 定时巡检 / 脚本库
运维·数据库·sql·mysql·架构
herinspace2 天前
管家婆实用贴-SQL 2008如何修改成混合模式
服务器·数据库·sql·管家婆软件·财务软件·合肥管家婆软件
大模型最新论文速读2 天前
text-to-sql:从学术玩具到生产落地
数据库·sql