如何在SQLite中获取子字符串的最后一个索引?

时间:2014-01-27 18:34:44

标签: sqlite

我在表格中有一个字符串:http://www.foo.com/hello/bar/baz我希望得到最后一个'/'之后的所有内容(在本例中为字符串'baz')。

我可以做substr(str,lastIndexOf(str,'/')),但我不知道如何在SQLite中获取lastIndexOf。

3 个答案:

答案 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)

解决方案是将代码中FilePathTableName的所有出现替换为表格中显示的名称。

您需要创建一个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