简体   繁体   English

如何在 Oracle SQL Developer 中的 json 中“选择位置”?

[英]How to “select where” within json in Oracle SQL Developer?

I have a table called DISCOUNT_CODES with two columns, one having JSON values:我有一个名为 DISCOUNT_CODES 的表,其中包含两列,一列具有 JSON 值:

CODE           ACTIVE
1234           {"active":"Y"}
2468           {"active":"N"}
1359           {"active":"Y"}

As the second column is in JSON, I was wondering if there was a way I can select the codes that are active without having to do a select query like:由于第二列在 JSON 中,我想知道是否有办法可以 select 激活代码,而无需执行 select 查询,例如:

SELECT CODE FROM DISCOUNT_CODES WHERE ACTIVE = '{"active":"Y"}';

In pseudo-code, I am wondering if something like this is possible:在伪代码中,我想知道这样的事情是否可能:

SELECT CODE FROM DISCOUNT_CODES WHERE JSON(ACTIVE $.active) = "Y";

Edit: I am using Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production编辑:我正在使用 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

Yes, you can use a SELECT statement containing JSON_TABLE() function for the DB version 12c+ such as the one below:是的,您可以对 DB 版本 12c+ 使用包含JSON_TABLE() function 的 SELECT 语句,如下所示:

SELECT d.code
  FROM discount_codes d
 CROSS JOIN JSON_TABLE(active, '$' COLUMNS (
                                            active VARCHAR2(100) PATH '$.active'
                                           )
                      ) j
 WHERE j.active = 'Y' 

Demo 演示

You can also use JSON_EXISTS您也可以使用JSON_EXISTS

SELECT CODE FROM DISCOUNT_CODES
WHERE json_exists(ACTIVE, '$?(@.active == "Y")');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM