我有一个表参数,有2列id(整数)和param_specs(text)。
实际的param_specs列如上图所示(为了简化它,请查看以下内容: - )
param_specs
[
{"paramName":"param1",
"type":"string",
"defaultValue":"tomcat7",
"optional":false,
"deploymentParam":false},
{"paramName":"param123PreStopAction",
"type":"path",
"defaultValue":"HELLO",
"optional":false,
"deploymentParam":false}
]
所以它是一个json数组的数组,我想获取defaultValue
paramName
的{{1}}字段,即HELLO。
**** **** EDIT 从图像中可以看出,这是我的表名为参数看起来像是有两列我希望得到参数表中每行的 defaultValue ,其中paramName LIKE(%PostStopAction) )或(%PreStopAction)检查图像中的粗体值(即paramName应在实际paramName值中具有PreStopAction或PostStopAction,例如' mytomcat7 PostStopAction '并获取其 defaultValue 即' 停止后'。)
表格中可能有一些行没有任何json具有preStop或PostStop paramName,如图像中的第3行
有人可以帮我查询吗?
由于JGH提出如下建议: -
SELECT" defaultValue" FROM参数a 交叉加入横向 json_to_recordset(a.param_spec :: json)AS x(" paramName" text," defaultValue" text) 在哪里" paramName“LIKE”%PreStopAction'或“paramName”LIKE“%PostStopAction”
答案 0 :(得分:0)
一种方法是在字段中展开您的数组并查询它们。诀窍是只考虑感兴趣的领域。
persons.forEach(i -> System.out.println(i.getFirstName() + " " + i.getLastName()));
或者,绑定到您的示例:
Select myOutputField
from json_to_recordset('[the array]') as (myQueryField text, myOutputField text)
where myQueryField = myCondition;
** 编辑 **
您的数据不会保存在json列中,而是保存在文本列中。您必须将其转换为json(理想情况下,列本身...或至少其内容)。此外,select "defaultValue" from json_to_recordset('
[
{"paramName":"param1",
"type":"string",
"defaultValue":"tomcat7",
"optional":false,
"deploymentParam":false},
{"paramName":"param123PreStopAction",
"type":"path",
"defaultValue":"HELLO",
"optional":false,
"deploymentParam":false}
]') as x("paramName" text,"defaultValue" text)
where "paramName" = 'param123PreStopAction';
适用于单个项目,而不适用于集合,因此您需要使用json_to_recordset
来克服此限制,正如here所解释的那样。
LATERAL JOIN
或者,绑定到您的示例:
SELECT myOutputField
FROM mytable a
CROSS JOIN LATERAL
json_to_recordset(a.jsonintextcolumn::json) as (myQueryField text, myOutputField text)
WHERE myQueryField = myCondition;