如何解决查询只有字符串 oracle 的 json 数组
下面是存储在名为“Sample”的表中的json,列名为“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",<br> "app.argument2.testId":["546","567"]<br> }<br>} |
dbfiddle here
您知道在 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'
);
dbfiddle here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。