之前在公司发现在线的查询平台是MySQL5.6,不能用JSON_EXTRACT,也不能用存储过程,所以只能自己编了一个简单的小查询,几条数据还是能查的,如果数据量大的话,估计耗的资源就会比较多。
先说一下问题的背景,是想在'{"platform":"Android","source":"tt","details":null}'
这一串东西里面找到source这个key对应的value值。这个方法是先找到source":"
这个字符串的起始位置和长度,这样就能够找到value值的起始位置;再找到这个字符串以后第一个"
出现的位置,就能得到value值的结束位置。再利用substr函数,就可以取出对应的位置。下面是对应的代码:
SELECT
'{"platform":"Android","source":"tt","details":null}' as 'sample'
,substr(
'{"platform":"Android","source":"tt","details":null}'
,locate('source":"','{"platform":"Android","source":"tt","details":null}')
+length('source":"')#取出value值的起始位置
,locate(
'"'
,'{"platform":"Android","source":"tt","details":null}'
,locate('source":"','{"platform":"Android","source":"tt","details":null}')
+length('source":"')
)#取出value值的结束位置
-(
locate('source":"','{"platform":"Android","source":"tt","details":null}')
+length('source":"')
)#减去value值的起始位置,得到value值字符长度
) as result
FROM DUAL
运行以后,就得到result的结果,就是tt。如果需要其他元素,就替换一下对应的key值和字段,就好了。欢迎大家一块探讨。