1

我有使用 geostamps 存储在 mysql 中的元数据。我想提取一组特定数据的经纬度,我一生都无法弄清楚将级别指定为值的语法

我需要单独的值,以便我可以使用它来检查该位置是否与记录的位置匹配,以及是否不相距。gps计算部分很简单。

我感兴趣的数据字符串如下所示:

"outcome_rating":{"value":"continue_support","timestamp":"2019-05-29 16:11:07", "geostamp":"lat=-29.787506666666665, long=31.022944999999996, alt=64.0, accuracy= 8.2"}

该表称为“monitorings”该字段称为“devicemagic_metadata”

我的尝试

SELECT
    select JSON_EXTRACT(devicemagic_metadata, "$.outcome_rating"."$.geostamp"."$.lat")
FROM monitorings;

任何帮助或指导将不胜感激

4

1 回答 1

0

您当前的 JSON 内容无效,因为它确实包含一个未出现在大括号内的外部键。下面看看正确的格式应该是什么。此解决方案假定您使用的是 MySQL 8+,它具有正则表达式替换功能。如果不是,那么您将需要一些非常丑陋的字符串函数调用来将纬度和经度与 JSON 值隔离开来。

WITH monitorings AS (
    SELECT '{"outcome_rating":{"value":"continue_support","timestamp":"2019-05-29 16:11:07", "geostamp":"lat=-29.787506666666665, long=31.022944999999996, alt=64.0, accuracy=8.2"}}' AS devicemagic_metadata
)

SELECT
    REGEXP_REPLACE(JSON_EXTRACT(devicemagic_metadata, "$.outcome_rating.geostamp"),
        '^"lat=([^,]+),.*$', '$1') AS lat,
    REGEXP_REPLACE(JSON_EXTRACT(devicemagic_metadata, "$.outcome_rating.geostamp"),
        '^.*long=([^,]+),.*$', '$1') AS lng
FROM monitorings;

在此处输入图像描述

演示

于 2019-06-03T05:35:42.643 回答