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

PrestoDB中解析VARCHAR类型JSON内的数字字段

解析JSON字段提取x、y数值的解决方案

原始表结构与数据

WITH my_table (event_date, coordinates) AS (
    values 
    ('2021-10-01','{"x":"1.0","y":"0.049"}'),
    ('2021-10-01','{"x":"0.0","y":"0.865"}'),
    ('2021-10-02','{"y":"0.5","x":"0.5"}'),
    ('2021-10-02','{"y":"0.469","x":"0.175"}'),
    ('2021-10-02','{"x":"0.954","y":"0.021"}')
) 

SELECT *
FROM my_table

对应原始数据:

event_datecoordinates
2021-10-01{"x":"1.0","y":"0.049"}
2021-10-01{"x":"0.0","y":"0.865"}
2021-10-02{"y":"0.5","x":"0.5"}
2021-10-02{"y":"0.469","x":"0.175"}
2021-10-02{"x":"0.954","y":"0.021"}

期望结果

需要将coordinates字段中的x、y数值单独提取,得到如下结构:

event_datexy
2021-10-011.00.049
2021-10-010.00.865
2021-10-020.50.5
2021-10-020.1750.469
2021-10-020.9540.021

解决方案

针对PostgreSQL

利用jsonb类型的操作符提取字段,并转换为数值类型:

WITH my_table (event_date, coordinates) AS (
    values 
    ('2021-10-01','{"x":"1.0","y":"0.049"}'),
    ('2021-10-01','{"x":"0.0","y":"0.865"}'),
    ('2021-10-02','{"y":"0.5","x":"0.5"}'),
    ('2021-10-02','{"y":"0.469","x":"0.175"}'),
    ('2021-10-02','{"x":"0.954","y":"0.021"}')
) 
SELECT 
    event_date,
    (coordinates::jsonb ->> 'x')::numeric AS x,
    (coordinates::jsonb ->> 'y')::numeric AS y
FROM my_table;
  • coordinates::jsonb:将字符串格式的JSON转为jsonb类型,支持更高效的JSON操作
  • ->>:提取JSON字段值并转为文本类型
  • ::numeric:将文本转为数值类型,确保结果为数字格式

针对MySQL

使用JSON_EXTRACT函数提取字段并转换类型:

WITH my_table (event_date, coordinates) AS (
    values 
    ('2021-10-01','{"x":"1.0","y":"0.049"}'),
    ('2021-10-01','{"x":"0.0","y":"0.865"}'),
    ('2021-10-02','{"y":"0.5","x":"0.5"}'),
    ('2021-10-02','{"y":"0.469","x":"0.175"}'),
    ('2021-10-02','{"x":"0.954","y":"0.021"}')
) 
SELECT 
    event_date,
    CAST(JSON_EXTRACT(coordinates, '$.x') AS DECIMAL) AS x,
    CAST(JSON_EXTRACT(coordinates, '$.y') AS DECIMAL) AS y
FROM my_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:01:10