首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据列值将一行分解/拆分成多行

根据列值将一行分解/拆分成多行
EN

Stack Overflow用户
提问于 2021-07-26 21:33:13
回答 1查看 62关注 0票数 0

我有一个表,我需要根据MariaDB中的app_permissions列值分解和拆分-从一行生成多行:

代码语言:javascript
复制
[email]        | [app_permissions]
john@p.ai      | {draft49:CAN_ACCESS_APP;CAN_VIEW_FINANCIAL_DATA}; {com.cc.worker:CAN_ACCESS_APP;CAN_VIEW_FINANCIAL_DATA} 

这是预期的查询结果:

代码语言:javascript
复制
[email]        | [app_permissions]
john@p.ai      | draft49:CAN_ACCESS_APP
john@p.ai      | draft49:CAN_VIEW_FINANCIAL_DATA
john@p.ai      | com.cc.worker:CAN_ACCESS_APP
john@p.ai      | com.cc.CAN_VIEW_FINANCIAL_DATA

我尝试交叉连接到同一个表,但没有产生以下输出

此外,据我所知,MariaDB没有原生的"split_part“函数,我正在努力避免为此目的创建过程。

数据库: MariaDB 10.2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-26 21:43:12

这相当痛苦,但是您可以构造一个数字列表,然后使用substring_index()提取分号之间的第n个子字符串。

然后,您需要从字符串中删除似乎不需要的其他字符:

代码语言:javascript
复制
select t.email,
       replace(replace(replace(substring_index(substring_index(t.app_permissions, ';', n.n), ';', -1), '}', ''), '{', ''), ' ', '') as permission
from t join
     (select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n union all select 5) n
     on t.app_permissions like concat('%', repeat(';%', n - 1));

我建议您修复数据模型,这样就不会在单个字符串中存储多个值。

Here是一个db<>fiddle。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68530835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档