我从SQLite数据库中检索了大量数据.检索时,我将其映射到我的应用程序中的不同视图.我的表格中有一个文本字段,我不希望得到全文,只有前n个字符.所以如果我的查询例如是:
Select description from articles where id='29';
Run Code Online (Sandbox Code Playgroud)
那么如何从描述中获取子字符串?谢谢
我有一个名为的表articles,其中包含以下格式的数据:
id|categories
--+----------
1|123,13,43
2|1,3,15
3|9,17,44,18,3
Run Code Online (Sandbox Code Playgroud)
出于测试目的,您可以使用以下 SQL 命令创建此表:
CREATE TABLE articles(id INTEGER PRIMARY KEY, categories TEXT);
INSERT INTO articles VALUES(1, '123,13,43'), (2, '1,3,15'), (3, '9,17,44,18,3');
Run Code Online (Sandbox Code Playgroud)
现在我想拆分categories列的值,以便得到如下所示的表:
id|category
--+--------
1|123
1|13
1|43
2|1
2|3
2|15
3|9
3|17
3|44
3|18
3|3
Run Code Online (Sandbox Code Playgroud)
如您所见,我想将原始表转换为第一范式。
从这个答案中,我已经知道如何以这种方式分割一行。以下代码示例仅获取第二行(即 id=2 的行)并以所需的方式拆分它们:
WITH split(article_id, word, str, offsep) AS
(
VALUES
(
2,
'',
(SELECT categories FROM articles WHERE id=2),
1
)
UNION ALL
SELECT
article_id,
substr(str, 0, CASE WHEN …Run Code Online (Sandbox Code Playgroud) 我正在努力转换
a | a1,a2,a3
b | b1,b3
c | c2,c1
Run Code Online (Sandbox Code Playgroud)
至:
a | a1
a | a2
a | a3
b | b1
b | b2
c | c2
c | c1
Run Code Online (Sandbox Code Playgroud)
以下是sql格式的数据:
CREATE TABLE data(
"one" TEXT,
"many" TEXT
);
INSERT INTO "data" VALUES('a','a1,a2,a3');
INSERT INTO "data" VALUES('b','b1,b3');
INSERT INTO "data" VALUES('c','c2,c1');
Run Code Online (Sandbox Code Playgroud)
解决方案可能是递归的公共表表达式。
这是一个与单行相似的示例:
WITH RECURSIVE list( element, remainder ) AS (
SELECT NULL AS element, '1,2,3,4,5' AS remainder
UNION ALL
SELECT
CASE
WHEN INSTR( remainder, ',' )>0 THEN …Run Code Online (Sandbox Code Playgroud)