我在表格中有一个字符串:http://www.foo.com/hello/bar/baz
我希望得到最后一个'/'之后的所有内容(在本例中为字符串'baz')。
我可以做substr(str,lastIndexOf(str,'/')),但我不知道如何在SQLite中获取lastIndexOf。
答案 0 :(得分:26)
select replace(str, rtrim(str, replace(str, '/', '')), '') from table;
说明:
例如我们有字符串:/storage/udisk/1200 Mics/[2002] 1200 Micrograms/1200 Mics - 03 - Mescaline.mp3
replace(str,'/','') - 从str删除/ chars所以我们将storageudisk1200 Mics[2002] 1200 Micrograms1200 Mics - 06 - Ecstasy.mp3
接下来我们使用rtrim它会从右到左删除所有匹配的字符,直到找到/
字符,这样我们找到了父目录:/storage/udisk/1200 Mics/[2002] 1200 Micrograms/
现在我们从文件路径中删除父路径名,我们有文件名1200 Mics - 03 - Mescaline.mp3
答案 1 :(得分:2)
sqlite核心功能的表现力有限。对于已知的最大/
个字符数,可以通过一系列嵌套的substr()
和instr()
调用来完成,将字符串的一部分移到下一个/
处。时间,但那不是太优雅。
你应该用你的编程语言来实现它。
答案 2 :(得分:0)
解决方案是将代码中FilePath
和TableName
的所有出现替换为表格中显示的名称。
您需要创建一个REVERSE
功能,例如在PHP中,您将运行以下命令:
conn.create_function("REVERSE", 1, lambda s: s[::-1])
注意:每种语言都有自己创建自定义SQLite命令的方法。
REVERSE
VARCHAR
,然后一旦处理完成REVERSE
,就会再次回来。
SELECT
FilePath,
REVERSE(SUBSTR(REVERSE(FilePath), INSTR(REVERSE(FilePath), '\'), LENGTH(FilePath))) AS [DirectoryPath],
REVERSE(SUBSTR(REVERSE(FilePath), 0, INSTR(REVERSE(FilePath), '\'))) AS [Filename]
FROM
TableName