我有带有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 ,准确性= 8.2“}
该表称为“监控” 该字段称为“ devicemagic_metadata”
我的尝试
SELECT
select JSON_EXTRACT(devicemagic_metadata, "$.outcome_rating"."$.geostamp"."$.lat")
FROM monitorings;
任何帮助或指导都会被重视
答案 0 :(得分: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;