sql - 拆分空格分隔值并将它们映射到 SQLite 中的原始 ID?
问题描述
我有一个名为的表personal_websessions
,其中包含以下格式的数据:
id_no | website_link
1 | google.com msn.com gmail.com
2 | stackoverflow.com reddit.com
3 | msn.com
您可以使用以下 SQL 命令创建此表:
CREATE TABLE personal_websessions(id_no INTEGER PRIMARY KEY, website_link TEXT);
INSERT INTO personal_websessions VALUES(1, 'google.com msn.com gmail.com'), (2, 'stackoverflow.com reddit.com'), (3, 'msn.com ');
我想用空格' '分割 website_link 列的值以获得下表结果:
id_no | website_link
1 | google.com
1 | msn.com
1 | gmail.com
2 | stackoverflow.com
2 | reddit.com
3 | msn.com
我想将 website_link 列拆分为一个空格来实现这一点 - 我尝试了不同的方法,包括此处概述的方法:
我知道有一种方法可以使用 sqlite 来做到这一点,但我还没有弄清楚!任何帮助是极大的赞赏!
谢谢-Goosfraba
解决方案
使用递归CTE
:
with recursive cte as (
select id_no, trim(website_link) || ' ' website_link,
substr(
website_link,
1,
case
when website_link like '% %' then instr(website_link, ' ') - 1
else website_link
end
) link
from personal_websessions
union all
select c.id_no, substr(c.website_link, length(c.link) + 2),
substr(
substr(c.website_link, length(c.link) + 2),
1,
instr(substr(c.website_link, length(c.link) + 2), ' ') - 1
) link
from cte c
where substr(c.website_link, length(c.link) + 2) like '% %'
)
select id_no, link website_link
from cte
order by id_no
请参阅演示。
结果:
| id_no | website_link |
| ----- | ----------------- |
| 1 | google.com |
| 1 | msn.com |
| 1 | gmail.com |
| 2 | stackoverflow.com |
| 2 | reddit.com |
| 3 | msn.com |
推荐阅读
- android - 不同设备的布局 - 约束布局和最小宽度限定符
- php - 如何通过 curl post 将文件上传到 api
- javascript - 可能未处理的拒绝:-尝试将数据从 angularJS 传递到 spring MVC
- angular - 如何从动态传递的数据中选择复选框?
- linux - 在makefile中,如果文件不存在则创建一个空文件
- vuejs2 - 如何在 Vue.js webapp 中使用 dygraphs?
- for-loop - 如何在 bash 中更正 awk 命令中的“for 语句”
- python - 在父进程和子进程之间使用管道
- telegram-bot - 是否可以使用 Telegram API 固定消息?
- wpf - 如果安装了 AVG 防病毒软件,则下载失败