发现当前数据库对字符串的解析都是使用存储过程,但是大部分公司不建议使用存过,无奈之下写了如下的解析方式:
原始数据如下图:
经过数据分析发现,每个键值对的分隔符是","(两个引号加一个英文逗号)
-
数据进行第一步去除数值中两侧{},变更","为~(下面在如果使用的是regexp_substr()函数可不进行变更,使用变更的主要原因是下面的strsplit()只能使用一个字符varchar(1),是规定还是写的不对,目前不是很清楚),去除多余双引号,得到数值如下:
然后对数据进行行转列
这里存在两种方式,一种是json字符串每个键值对的位置比较稳定,可以使用函数regexp_substr(sms_cntt,'[^~]+',1,1)获取到的值如下:
使用replace()函数替换掉字段名和“:”就是你想要的值
另一种方式是使用strsplit()函数,如下:
该处理获取到的值会在同一列进行展示,需根据模糊匹配已知的字段名加“:”获取相应的键值对,最后利用replace()函数替换掉字段名和“:”就是你想要的值