oracle kv字符串转换为多行两列

在Oracle数据库中,如果需要将一个包含多个值的KV(Key-Value)字符串转换为多行两列的格式,你可以使用多种方法来实现这个需求。这里将提供两种常见的方法:使用CONNECT BY语法和CASE表达式结合REGEXP_SUBSTR函数。

方法1:使用CONNECT BY

如果你KV字符串格式是类似于key1:value1,key2:value2,key3:value3这样的,你可以使用CONNECT BY和SYS_CONNECT_BY_PATH来实现:

WITH kv_data AS (

SELECT 'key1:value1,key2:value2,key3:value3' AS kv_string FROM dual

)

SELECT TRIM(SUBSTR(keys, 1, INSTR(keys, ':') - 1)) AS key,

TRIM(SUBSTR(keys, INSTR(keys, ':') + 1)) AS value

FROM (

SELECT TRIM(SYS_CONNECT_BY_PATH(SUBSTR(kv_string, INSTR(kv_string, ',', 1, level - 1) + 1,

INSTR(kv_string, ',', 1, level) - INSTR(kv_string, ',', 1, level - 1) - 1), ',') || ',') AS keys

FROM kv_data

CONNECT BY INSTR(kv_string, ',', 1, level) > 0

)

WHERE keys IS NOT NULL;

方法2:使用REGEXP_SUBSTR和CASE表达式

这种方法更适合于处理更复杂的情况或者当你想要更灵活地处理键值对时:

WITH kv_data AS (

SELECT 'key1:value1,key2:value2,key3:value3' AS kv_string FROM dual

)

SELECT REGEXP_SUBSTR(kv_string, '[^,]+', 1, level) AS key_val

FROM kv_data

CONNECT BY REGEXP_SUBSTR(kv_string, '[^,]+', 1, level) IS NOT NULL

AND PRIOR kv_string = kv_string

AND PRIOR sys_guid() IS NOT NULL;

然后,可以使用一个外部查询来将这个结果分解为键和值:

WITH kv_data AS (

SELECT 'key1:value1,key2:value2,key3:value3' AS kv_string FROM dual

), key_val AS (

SELECT REGEXP_SUBSTR(kv_string, '[^,]+', 1, level) AS key_val

FROM kv_data

CONNECT BY REGEXP_SUBSTR(kv_string, '[^,]+', 1, level) IS NOT NULL

AND PRIOR kv_string = kv_string

AND PRIOR sys_guid() IS NOT NULL

)

SELECT SUBSTR(key_val, 1, INSTR(key_val, ':') - 1) AS key,

SUBSTR(key_val, INSTR(key_val, ':') + 1) AS value

FROM key_val;

相关推荐
审判长烧鸡19 分钟前
PostgreSQL之索引/函数/触发器
数据库·postgresql·触发器·函数·索引
Data_Journal24 分钟前
如何使用cURL更改User Agent
大数据·服务器·前端·javascript·数据库
Python私教44 分钟前
GenericAgent PySide6 桌面应用深度解析:悬浮按钮 + 聊天面板的原生 Qt 方案
开发语言·数据库·qt
byoass1 小时前
企业云盘与设计软件深度集成:AutoCAD/Revit/SolidWorks插件开发与API集成实战
服务器·网络·数据库·安全·oracle·云计算
爬山算法2 小时前
MongoDB(113)如何使用第三方工具进行MongoDB监控?
数据库·mongodb
早日退休!!!3 小时前
大模型推理瓶颈七层分析模型
java·服务器·数据库
大山同学3 小时前
claudecode精炼版-CoreCoder
数据库·人工智能·claude code·corecoder
of Watermelon League3 小时前
5、使用 pgAdmin4 图形化创建和管理 PostgreSQL 数据库
数据库·postgresql
Dontla3 小时前
Python asyncpg库介绍(基于Python asyncio的PostgreSQL数据库驱动)连接池、SQLAlchemy
数据库·python·postgresql
俺不要写代码3 小时前
数据库:DQL
数据库·sql·mysql