如何使用SQL查询JSON格式表中指定迭代项的名称?
嗨 Simon,针对你想从JSON格式的数据里提取编号为0的迭代项名称(也就是Toto)的需求,不同的SQL数据库有不同的实现语法,我给你整理了几种主流数据库的具体写法,你可以根据自己用的数据库来选:
MySQL 数据库
如果你的JSON字段(假设字段名为iterations)存储的是数组结构,比如[{"name":"Toto"}, {"name":"Other"}],可以用->>运算符或者JSON_UNQUOTE+JSON_EXTRACT组合来提取:
-- 简化写法(推荐) SELECT iterations->>'$[0].name' AS item_name FROM table1 WHERE id=1; -- 等价的完整函数写法 SELECT JSON_UNQUOTE(JSON_EXTRACT(iterations, '$[0].name')) AS item_name FROM table1 WHERE id=1;
这里$[0].name的意思是:$代表整个JSON对象,[0]定位到数组的第一个元素(下标从0开始),.name提取该元素的name属性。
PostgreSQL 数据库
PostgreSQL对JSON的支持很灵活,假设字段类型是json或jsonb,可以用箭头运算符直接定位:
-- 写法1:链式箭头运算符 SELECT (iterations->0->>'name') AS item_name FROM table1 WHERE id=1; -- 写法2:使用json_extract_path_text函数 SELECT json_extract_path_text(iterations, '0', 'name') AS item_name FROM table1 WHERE id=1;
->用来提取JSON元素(保留JSON类型),->>则直接提取文本类型的值。
SQL Server 数据库
SQL Server用JSON_VALUE函数来提取JSON中的标量值:
SELECT JSON_VALUE(iterations, '$.0.name') AS item_name FROM table1 WHERE id=1;
这里的路径$.0.name逻辑和前面一致:$代表根对象,0是数组下标,name是目标属性。
内容的提问来源于stack exchange,提问作者Simon23
相关产品推荐
相关产品推荐

