如何在SQLite中获取子字符串?
有一个专栏。 它的价值观是 “/abc/def/ghi/w1.xyz” “/jkl/mno/r.stuv” (它是路径数据,每个值中的“/”数不是固定的。)如何在SQLite中获取子字符串?,sqlite,Sqlite,有一个专栏。 它的价值观是 “/abc/def/ghi/w1.xyz” “/jkl/mno/r.stuv” (它是路径数据,每个值中的“/”数不是固定的。) 如何获取具有如下值的子字符串列 “/abc/def/ghi/” “/jkl/mno/” (仅提取目录部分。删除文件部分。) 我读过关于substr(X,Y),substr(X,Y,Z),instr(X,Y)的书 但是应用它们并不容易,因为每个值中的“/”的数量不是固定的,instr(X,Y)似乎从左边找到第一个匹配项。如果您在Unix/
如何获取具有如下值的子字符串列 “/abc/def/ghi/” “/jkl/mno/” (仅提取目录部分。删除文件部分。)
我读过关于substr(X,Y),substr(X,Y,Z),instr(X,Y)的书
但是应用它们并不容易,因为每个值中的“/”的数量不是固定的,instr(X,Y)似乎从左边找到第一个匹配项。如果您在Unix/Linux环境中,您可以这样做(让我们举个例子) 假设
test.db
是您的SQLite3数据库,其表如下所示:
create table test (dataset text);
insert into test (dataset) values ('/abc/def/ghi/w1.xyz');
insert into test (dataset) values ('/jkl/mno/r.stuv');
从命令行,您可以运行:
sqlite3 test.db -batch -noheader "select dataset from test"
这将为您提供输出(我知道这不是您想要的输出,但请继续阅读):
解释
和-batch
开关抑制除SQL语句产生的数据外的所有输出-noheader
运行您提供的sql语句,并将输出转储到屏幕上(stdout)sqlite3 test.db-batch-noheader“sql语句”
awk
来获得您想要的:
sqlite3 test.db -batch -noheader "select dataset from test" | awk -F'/' 'BEGIN{OFS="/"} {$NF = ""; print $0}'
结果将是:
/abc/def/ghi/
/jkl/mno/
粗略解释
适用于sqlite3命令输出的每一行awk
- 该行由
字符和/
开关分割-F'/'
- 由于我们希望输出按原样包含分隔符,因此我们还使用
将输出字段分隔符设置为OFS='/'
'/'
- 我们以忽略最后一项的方式设置字段数(NF),然后打印其余数据
- 打印其他拆分字段时,OFS会在这些字段之间插入
/
test.db
是您的SQLite3数据库,其表如下所示:
create table test (dataset text);
insert into test (dataset) values ('/abc/def/ghi/w1.xyz');
insert into test (dataset) values ('/jkl/mno/r.stuv');
从命令行,您可以运行:
sqlite3 test.db -batch -noheader "select dataset from test"
这将为您提供输出(我知道这不是您想要的输出,但请继续阅读):
解释
和-batch
开关抑制除SQL语句产生的数据外的所有输出-noheader
运行您提供的sql语句,并将输出转储到屏幕上(stdout)sqlite3 test.db-batch-noheader“sql语句”
awk
来获得您想要的:
sqlite3 test.db -batch -noheader "select dataset from test" | awk -F'/' 'BEGIN{OFS="/"} {$NF = ""; print $0}'
结果将是:
/abc/def/ghi/
/jkl/mno/
粗略解释
适用于sqlite3命令输出的每一行awk
- 该行由
字符和/
开关分割-F'/'
- 由于我们希望输出按原样包含分隔符,因此我们还使用
将输出字段分隔符设置为OFS='/'
'/'
- 我们以忽略最后一项的方式设置字段数(NF),然后打印其余数据
- 打印其他拆分字段时,OFS会在这些字段之间插入
/
结果: 使用递归: 请参阅。
结果:
我不知道SQLite是否有可以帮助您的功能。您可以使用Python、PHP、Unix/Windows实用程序等编程语言从SQLite中提取数据并将其拆分。我不知道SQLite是否有可以帮助您的功能。您可以使用Python、PHP、Unix/Windows实用程序等编程语言从SQLite中提取数据并将其拆分。这太棒了。非常感谢。太棒了。非常感谢。非常感谢。我从你那里学到了不同的方法。我无法想象。但我只能使用SQL语句。♡这就是StackOverflow的美妙之处——相互学习不同的计算技术。用户
forpas
非常出色,递归CT的解决方案非常棒。谢谢。我从你那里学到了不同的方法。我无法想象。但我只能使用SQL语句。♡这就是StackOverflow的美妙之处——相互学习不同的计算技术。用户forpas
非常出色,递归CT的解决方案非常棒。