繁体   English   中英

CAST TO DATE 转换为 JSON_TABLE 定义 - Oracle

[英]CAST TO DATE into JSON_TABLE DEFINITION - Oracle

我有下一个代码:

INSERT INTO TMP_VDD_JSON
VALUES (
    200, 2, 4010,
    '{
        "Cuenta": [
            {
                "persona": {"nombre": "Pedro", "documento": "9876543A", "fecha-nacimiento": "02/02/1982", "ciudad": "Barcelona"}
            }
        ]
);

我想把它转换成 JSON_TABLE。

SELECT jt.NOMBRE, jt.DOCUMENTO, jt.FECHA_NACIMIENTO, jt.CIUDAD
FROM TMP_VDD_JSON tmp,
JSON_TABLE(tmp.JSON_OBJ, '$.Cuenta[0].persona'
    COLUMNS (
        NOMBRE PATH '$.nombre',
        DOCUMENTO PATH '$.documento',
        **FECHA_NACIMIENTO DATE PATH '$."fecha-nacimiento",**
        CIUDAD PATH '$.ciudad'
    )) jt

主要目的是将字段 FECHA_NACIMIENTO隐式转换为 JSON_TABLE 的 DATE、INTO 子句。

¡不想在 SELECT 声明中这样做? 有什么办法吗?

有什么办法吗?

是的,如果您的日期采用 ISO 8601 格式:

CREATE TABLE tmp_vdd_json(
  JSON_OBJ CLOB CHECK ( json_obj IS JSON )
);

INSERT INTO TMP_VDD_JSON
VALUES (
'{"Cuenta": [{"persona": {
    "nombre": "Pedro",
    "documento": "9876543A",
    "fecha-nacimiento": "1982-02-02",
    "ciudad": "Barcelona"
}}]}'
);

然后您的查询(如果您添加缺少的单引号)有效:

SELECT jt.NOMBRE, jt.DOCUMENTO, jt.FECHA_NACIMIENTO, jt.CIUDAD
FROM TMP_VDD_JSON tmp,
JSON_TABLE(tmp.JSON_OBJ, '$.Cuenta[0].persona'
    COLUMNS (
        NOMBRE PATH '$.nombre',
        DOCUMENTO PATH '$.documento',
        FECHA_NACIMIENTO DATE PATH '$."fecha-nacimiento"',
        CIUDAD PATH '$.ciudad'
    )) jt

并输出:

名词 文件 FECHA_NACIMIENTO
佩德罗 9876543A 02-FEB-82 巴塞罗那

如果您有一个非标准的日期格式,那么,不,它不起作用,您需要像这样在 select 列表中执行转换(为您的数据调整格式 model):

SELECT jt.NOMBRE,
       jt.DOCUMENTO,
       TO_DATE( jt.FECHA_NACIMIENTO, 'YYYY-MM-DD' ) AS FECHA_NACIMIENTO,
       jt.CIUDAD
FROM   TMP_VDD_JSON tmp
       CROSS APPLY JSON_TABLE(
         tmp.JSON_OBJ,
         '$.Cuenta[0].persona'
         COLUMNS (
           NOMBRE           VARCHAR2(20) PATH '$.nombre',
           DOCUMENTO        VARCHAR2(20) PATH '$.documento',
           FECHA_NACIMIENTO VARCHAR2(20) PATH '$."fecha-nacimiento"',
           CIUDAD           VARCHAR2(20) PATH '$.ciudad'
         )
       ) jt

db<> 在这里摆弄

暂无
暂无

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

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