oracle - 以路径作为查询列值的 Oracle JSON_QUERY
问题描述
我尝试在此选择的每个结果行中获取 JSON 列的一部分
SELECT TRIM(a.symbol),
TRIM(a.ex_name),
to_char(a.date_rw, 'dd-MON-yyyy'),
a.pwr,
a.last,
JSON_QUERY(b.mval, '$."-9"') as value
FROM adviser_log a
INNER JOIN profit_model_d b
ON a.date_rw = b.date_rw
WHERE a.date_rw = '08-OCT-2021'
选择结果:
VERY NAS 08-OCT-2021 -9 8.9443 {"sl":-3.6,"tp":5,"avg":1.368,"max":5,"min":-3.6,"count":1}
作为 json 路径,我输入了“-9”字面量,但我想将其作为路径 a.pwr
我想将与 a.pwr 比较的部分 json 匹配到 select 中的每一行
谢谢
解决方案
您可以使用函数来动态获取 JSON 值:
WITH FUNCTION get_value(
value IN CLOB,
path IN VARCHAR2
) RETURN VARCHAR2
IS
BEGIN
RETURN JSON_OBJECT_T( value ).get_object( path ).to_string();
END;
SELECT TRIM(a.symbol) AS symbol,
TRIM(a.ex_name) AS ex_name,
to_char(a.date_rw, 'dd-MON-yyyy') AS date_rw,
a.pwr,
a.last,
get_value(b.mval, a.pwr) AS value
FROM adviser_log a
INNER JOIN profit_model_d b
ON a.date_rw = b.date_rw
WHERE a.date_rw = DATE '2021-10-08'
其中,对于您的示例数据:
CREATE TABLE adviser_log (symbol, ex_name, date_rw, pwr, last) AS
SELECT 'VERY', 'NAS', DATE '2021-10-08', -9, 8.9443 FROM DUAL;
CREATE TABLE profit_model_d (date_rw DATE, mval CLOB CHECK (mval IS JSON));
INSERT INTO profit_model_d (
date_rw,
mval
) VALUES (
DATE '2021-10-08',
'{"-9":{"sl":-3.6,"tp":5,"avg":1.368,"max":5,"min":-3.6,"count":1}}'
);
输出:
象征 EX_NAME DATE_RW 压水堆 最后的 价值 非常 NAS 2021 年 10 月 8 日 -9 8.9443 {"sl":-3.6,"tp":5,"avg":1.368,"max":5,"min":-3.6,"count":1}
db<>在这里摆弄
推荐阅读
- c# - 在 Durable Function 中等待数据工厂管道完成
- c - 为什么传递给`gcc`的参数顺序会影响构建共享库的`readelf -d`的输出?
- laravel - 如何在 laravel 中进行此查询?
- r - 显示小标题的所有变量
- selenium - XPath 不适用于其中一种硒方案
- c# - 如何修复“构建到 WebGL 后 Unity 变换位置发生变化”?
- node.js - Morgan 和 Rotating-file-stream:interval 无法正常工作
- javascript - Javascript For循环一次附加相同的元素
- python - GIMP:POC 结果与减去混合模式的 GIMP 不匹配
- go - 请告诉我如何将多数组绑定到结构