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'
        )
    )
)
相关推荐
han_hanker13 分钟前
SQL语法 一个统计的查询
sql
竹枝溪2 小时前
MySQL数据库零基础入门
数据库·sql·mysql·navicat·ddl·dml·dql
smilejingwei16 小时前
CodeBuddy+SQLazy 编写复杂 SQL 详解
sql·codebuddy·sqlazy
蒲公英eric1 天前
从布尔盲注到参数化查询:DVWA SQL 盲注模块完整漏洞分析教程
sql·web安全·ai·dvwa·ai安全·sql 盲注
今天AI了吗1 天前
MCP 协议打通 AI 与国产数据库,SQL 调优全流程一站式闭环
数据库·人工智能·sql
灯澜忆梦1 天前
【MySQL11】进阶篇 | 索引_#3使用规则
数据库·sql·mysql·性能优化
云技纵横1 天前
线上接口突然超时,怎么判断卡在 Nginx、线程池、连接池还是 SQL?
后端·sql·mysql
sugar__salt1 天前
MyBatis ③动态 SQL 完全指南 —— 从条件拼接到批量操作
java·sql·mybatis
fchen5211 天前
JSON:一站式开发者工具集,SQL日志解析并填充 、JSON格式化 与文本比对
sql·microsoft·json
x-cmd1 天前
用 Rust 打造 AI 时代的 SQL:把重复任务变成可执行文件
数据库·人工智能·sql·ai·容器·rust·workflow