SQL中如何提取表内JSON数组列的最后一个元素值
提取JSON数组最后一个元素的Name值方案
不同SQL数据库的JSON处理函数存在差异,以下是主流数据库的可行实现方案:
MySQL(8.0+版本)
利用JSON_LENGTH获取数组长度,结合JSON路径定位最后一个元素(数组索引从0开始,需用长度减1),再提取Name值:
SELECT ID, Ticket, -- 简化写法(->> 等价于 JSON_UNQUOTE(JSON_EXTRACT())) Description->>CONCAT('$[', JSON_LENGTH(Description)-1, '].Name') AS Description, Date FROM YourTableName;
如果需要处理空数组的情况,可通过COALESCE设置默认值:
SELECT ID, Ticket, COALESCE(Description->>CONCAT('$[', JSON_LENGTH(Description)-1, '].Name'), '无名称') AS Description, Date FROM YourTableName;
SQL Server
版本2022+(支持last()路径函数)
直接用last()定位数组最后一个元素,写法简洁高效:
SELECT ID, Ticket, JSON_VALUE(Description, 'strict $[last()].Name') AS Description, Date FROM YourTableName;
版本2016-2019
通过OPENJSON将数组转为行集,按索引倒序取第一条数据:
SELECT ID, Ticket, (SELECT TOP 1 JSON_VALUE(j.value, '$.Name') FROM OPENJSON(t.Description) j ORDER BY CAST(j.[key] AS INT) DESC) AS Description, Date FROM YourTableName t;
PostgreSQL
针对json或jsonb类型字段,用数组长度函数定位最后一个元素:
-- 字段为json类型时 SELECT ID, Ticket, (Description -> (json_array_length(Description) - 1) ->> 'Name') AS Description, Date FROM YourTableName; -- 字段为jsonb类型时 SELECT ID, Ticket, (Description -> (jsonb_array_length(Description) - 1) ->> 'Name') AS Description, Date FROM YourTableName;
内容的提问来源于stack exchange,提问作者vybhavi rs
相关产品推荐
相关产品推荐

