數(shù)據(jù)大致格式如下,需求:
求當(dāng)前公司等于P的角色(JSON中的R字段)
| company_name | case_role |
|---|---|
| 江蘇XXXX集團(tuán)有限公司 | [{"P":"張三","R":"申請(qǐng)執(zhí)行人","ShowName":"張三","N":"","O":-2},{"P":"江蘇XXXX集團(tuán)有限公司","R":"被執(zhí)行人","ShowName":"江蘇XXXX集團(tuán)有限公司","N":"00300fef44ee8d7cee7aa43ba0def3c8","O":0}] |
case_role格式化后
[{
"P": "張三",
"R": "申請(qǐng)執(zhí)行人",
"ShowName": "張三",
"N": "",
"O": -2
}, {
"P": "江蘇XXXX集團(tuán)有限公司",
"R": "被執(zhí)行人",
"ShowName": "江蘇XXXX集團(tuán)有限公司",
"N": "00300fef44ee8d7cee7aa43ba0def3c8",
"O": 0
}]
要實(shí)現(xiàn)需求必須JSON與JSON之間能夠切割,但是目前JSON間是逗號(hào)不能直接Split(case_role,','),將case_role轉(zhuǎn)成
{
"P": "張三",
"R": "申請(qǐng)執(zhí)行人",
"ShowName": "張三",
"N": "",
"O": -2
}; {
"P": "江蘇XXXX集團(tuán)有限公司",
"R": "被執(zhí)行人",
"ShowName": "江蘇XXXX集團(tuán)有限公司",
"N": "00300fef44ee8d7cee7aa43ba0def3c8",
"O": 0
}
這樣進(jìn)行Split(case_role,';')后使用get_json_object取對(duì)應(yīng)字段即可
第一步轉(zhuǎn)換:
explode(split(regexp_replace(regexp_replace(case_role, '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{'),'\\;')) as case_role
regexp_replace(case_role, '\\[|\\]','')去掉[]
regexp_replace(regexp_replace(case_role, '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{')
將JSON間的逗號(hào)替換成;
第二步取值
get_json_object(a.case_role,'$.R') as case_role
最終SQL
select
a.company_name
,get_json_object(a.case_role,'$.R') as case_role
from
(
SELECT
,company_name
,explode(split(regexp_replace(regexp_replace(case_role, '\\[|\\]',''),'\\}\\,\\{','\\}\\;\\{'),'\\;')) as case_role
FROM qcc
) a
WHERE get_json_object(a.case_role,'$.P')=a.company_name
當(dāng)然也可以使用正則,能解決問(wèn)題就好