dip*_*ali 9 sql sqlite android
我想String在SQLite数据库中拆分逗号分隔
示例:我的表中有一Category列.
|Category |
|------------------------------|
|Auto,A,1234444 |
|Auto,B,2345444 |
|Electronincs,Computer,33443434|
Run Code Online (Sandbox Code Playgroud)
我想从上面的字符串中只获取一个值.
value1: Auto
value2: A
value3: 1234444
Run Code Online (Sandbox Code Playgroud)
我在Google上搜索了很多; 我发现了一种使用Replace()和替换逗号的方法Trim().但是,我想要一个更简单的方法.
在SQL中,提供了SubString().但在SQLite中,没有这样的功能.怎么解决?
编辑:我已经检查过了substr().但是,这个函数可以设置最大长度来获取字符串值,而我的字符串值没有固定长度.
use*_*607 20
您可以使用公用表表达式在SQLite中拆分逗号分隔值.
WITH split(word, str) AS (
-- alternatively put your query here
-- SELECT '', category||',' FROM categories
SELECT '', 'Auto,A,1234444'||','
UNION ALL SELECT
substr(str, 0, instr(str, ',')),
substr(str, instr(str, ',')+1)
FROM split WHERE str!=''
) SELECT word FROM split WHERE word!='';
Run Code Online (Sandbox Code Playgroud)
输出符合预期:
Auto
A
1234444
Run Code Online (Sandbox Code Playgroud)
SQLite 提供了用于此目的的函数,例如获取子字符串substr('your string', start_position, end_position)、获取字符串中特定字符的位置instr('22:string', ':')以及获取字符串的长度length('string')。现在让我们看看以下示例:
select substr('22:khan', x, y);
returns a string starting at x and ends with y;
select substr('22:khan', 0, instr('22:khan',':'));
returns: 22
select substr('22:khan', instr('22:khan',':')+1, length('22:khan'));
returns: khan
select substr('22:khan',instr('22:khan',':'), length('22:khan'));
returns: :khan
select substr('Noor,Khan', 0, instr('Noor,Khan', ','));
returns: Noor
select substr('Noor,Khan', instr('Noor,Khan', ',')+1, length('Noor,Khan'));
returns: Khan
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息,请访问: https: //www.sqlite.org/lang_corefunc.html
我喜欢 @user1461607 的答案,除了:在我看来,SQLite 文档警告不要从 SELECT 中假设任何特定顺序,无论是在一般情况下,还是在递归 SELECT 的特定情况下。在这里,我修改了答案,以我认为SQLite 保证工作的方式添加排序列。
我还将示例从逗号分隔的列表更改为路径,以表明在某些情况下您确实需要按特定顺序处理事物。此示例还打印出临时表中的所有列,因此更容易看到发生了什么。AFAICT,SQLite 中的 CTE 没有通常的 ROWID 列,因此看来您自己添加一些排序列确实需要在晚上睡个好觉。
WITH RECURSIVE split(seq, word, str) AS (
SELECT 0, '/', 'home/ronburk/layers/branch'||'/'
UNION ALL SELECT
seq+1,
substr(str, 0, instr(str, '/')),
substr(str, instr(str, '/')+1)
FROM split WHERE str != ''
) SELECT * FROM split ORDER BY split.seq ASC;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21925 次 |
| 最近记录: |