You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从JSON列提取PERIOD1下指定日期并定义为date1、date2的技术问题

Oracle从CLOB类型JSON字段提取日期并传入函数

解决方案

针对emp_json_tbl表中emp_json(CLOB类型)字段的JSON数据,可通过Oracle原生JSON函数提取指定日期并转换为DATE类型后传入目标函数。

1. 示例表结构与测试数据

-- 创建表
CREATE TABLE emp_json_tbl (
    emp_id NUMBER,
    emp_json CLOB CHECK (emp_json IS JSON)
);

-- 插入测试数据
INSERT INTO emp_json_tbl VALUES (
    1,
    '{
        "flows": [],
        "PERIOD1": {
            "date1": "05/31/2024",
            "date2": "06/15/2024"
        }
    }'
);

2. 提取日期并调用函数的SQL语句

假设目标处理函数为my_process_date(p_date1 DATE, p_date2 DATE),可使用以下语句完成提取与调用:

SELECT 
    my_process_date(
        -- 提取PERIOD1下的date1并转换为DATE类型
        TO_DATE(JSON_VALUE(emp_json, '$.PERIOD1.date1' RETURNING VARCHAR2), 'MM/DD/YYYY'),
        -- 提取PERIOD1下的date2并转换为DATE类型
        TO_DATE(JSON_VALUE(emp_json, '$.PERIOD1.date2' RETURNING VARCHAR2), 'MM/DD/YYYY')
    ) AS function_exec_result
FROM emp_json_tbl;

3. 关键细节说明

  • JSON_VALUE:用于从CLOB类型的JSON中按路径提取字符串值,$.PERIOD1.date1为JSON节点的路径表达式,RETURNING VARCHAR2明确指定返回类型,适配CLOB字段的JSON解析逻辑。
  • TO_DATE:将提取到的字符串日期转换为Oracle DATE类型,格式MM/DD/YYYY需与JSON中存储的日期格式完全匹配。
  • 异常兼容(可选):若JSON节点可能缺失,可添加默认值避免转换报错:
SELECT 
    my_process_date(
        TO_DATE(
            JSON_VALUE(emp_json, '$.PERIOD1.date1' RETURNING VARCHAR2 DEFAULT '01/01/1900'), 
            'MM/DD/YYYY'
        ),
        TO_DATE(
            JSON_VALUE(emp_json, '$.PERIOD1.date2' RETURNING VARCHAR2 DEFAULT '01/01/1900'), 
            'MM/DD/YYYY'
        )
    ) AS function_exec_result
FROM emp_json_tbl;

内容的提问来源于stack exchange,提问作者Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 07:42:44