sql - CAST TO DATE 转换为 JSON_TABLE 定义 - 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 82 年 2 月 2 日 巴塞罗那
如果你有一个非标准的日期格式,那么,不,它不会工作,你需要像这样在选择列表中执行转换(调整你的数据的格式模型):
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<>在这里摆弄
推荐阅读
- api - 在 Nexus 中获取工件的最新版本
- javascript - 如何在提交时将一个表单的值提交到另一个表单
- javascript - 带标识符的表数据导出
- dart - 对私有字段或抽象方法使用混入 Dart
- window-managers - awesomewm 重映射标签显示
- u-boot - 从 u-boot 写入 eMMC boot0 分区
- php - 在 PHP 文件和 Laravel 的 VSCode 中获取一般错误
- angular - 如何在Angular的当前页面中执行某些操作时避免导航到另一个页面
- php - 密码错误 | 未找到“Yii”类
- python - 将 wfdb 输出保存为图像