查询 json 只有字符串的数组 oracle
query json array having only strings oracle
下面是 json 存储在名为“Sample”的 table 中,列名为“argument”。我想获取所有在指定参数中具有特定值的记录。我可以查询参数名称但不能查询特定值,因为它是一个字符串数组。 (请找到我的钥匙里面有 .)
{
"arguments":{
"app.argument1.appId":["123", "456"],
"app.argument2.testId":["546", "567"]
}
}
这给了我所有具有特定参数的记录。
select * from sample where json_exists(argument, '$.arguments."app.argument1.appId"');
但我需要匹配参数值。我在下面尝试但出现 JSON 表达式错误。
select * from sample where json_exists(argument, '$.arguments."app.argument1.appId[*]"?(@ == "123"));
请帮忙。提前致谢。
你把引号放错地方了;你想要在数组的方括号之前而不是之后的双引号:
select *
from sample
where json_exists(
argument,
'$.arguments."app.argument1.appId"[*]?(@ == "123")'
);
其中,对于示例数据:
CREATE TABLE sample ( argument CLOB CHECK ( argument IS JSON ) );
INSERT INTO sample ( argument ) VALUES ( '{
"arguments":{
"app.argument1.appId":["123", "456"],
"app.argument2.testId":["546", "567"]
}
}');
输出:
| ARGUMENT |
| :----------------------------------------------------------------------------------------------------------------------- |
| {<br> "arguments":{<br> "app.argument1.appId":["123", "456"],<br> "app.argument2.testId":["546", "567"]<br> }<br>} |
db<>fiddle here
Do you know a way to do this in 12.1?
您还可以将 EXISTS
与相关的 JSON_TABLE
(which is available from Oracle 12c Release 1 (12.1.0.2)) 结合使用。:
select *
from sample
where EXISTS (
SELECT 1
FROM JSON_TABLE(
argument,
'$.arguments."app.argument1.appId"[*]'
COLUMNS (
value VARCHAR2(100) PATH '$'
)
)
WHERE value = '123'
);
db<>fiddle here
下面是 json 存储在名为“Sample”的 table 中,列名为“argument”。我想获取所有在指定参数中具有特定值的记录。我可以查询参数名称但不能查询特定值,因为它是一个字符串数组。 (请找到我的钥匙里面有 .)
{
"arguments":{
"app.argument1.appId":["123", "456"],
"app.argument2.testId":["546", "567"]
}
}
这给了我所有具有特定参数的记录。
select * from sample where json_exists(argument, '$.arguments."app.argument1.appId"');
但我需要匹配参数值。我在下面尝试但出现 JSON 表达式错误。
select * from sample where json_exists(argument, '$.arguments."app.argument1.appId[*]"?(@ == "123"));
请帮忙。提前致谢。
你把引号放错地方了;你想要在数组的方括号之前而不是之后的双引号:
select *
from sample
where json_exists(
argument,
'$.arguments."app.argument1.appId"[*]?(@ == "123")'
);
其中,对于示例数据:
CREATE TABLE sample ( argument CLOB CHECK ( argument IS JSON ) );
INSERT INTO sample ( argument ) VALUES ( '{
"arguments":{
"app.argument1.appId":["123", "456"],
"app.argument2.testId":["546", "567"]
}
}');
输出:
| ARGUMENT | | :----------------------------------------------------------------------------------------------------------------------- | | {<br> "arguments":{<br> "app.argument1.appId":["123", "456"],<br> "app.argument2.testId":["546", "567"]<br> }<br>} |
db<>fiddle here
Do you know a way to do this in 12.1?
您还可以将 EXISTS
与相关的 JSON_TABLE
(which is available from Oracle 12c Release 1 (12.1.0.2)) 结合使用。:
select *
from sample
where EXISTS (
SELECT 1
FROM JSON_TABLE(
argument,
'$.arguments."app.argument1.appId"[*]'
COLUMNS (
value VARCHAR2(100) PATH '$'
)
)
WHERE value = '123'
);
db<>fiddle here