Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQLite中获取子字符串的最后一个索引?_Sqlite - Fatal编程技术网

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

如何在SQLite中获取子字符串的最后一个索引?,sqlite,Sqlite,我在表中有一个字符串:http://www.foo.com/hello/bar/baz我想得到最后一个“/”后面的所有内容(在本例中是字符串“baz”) 我可以做substr(str,lastIndexOf(str,“/”),但我不知道如何在SQLite中获得lastIndexOf。SQLite核心函数的表达能力是有限的。对于已知最大数量的/字符,这可以通过一系列嵌套的substr()和instr()调用来完成,一次将字符串的一部分删除到下一个/,但这并不太优雅 你真的应该用你的编程语言来做 s

我在表中有一个字符串:
http://www.foo.com/hello/bar/baz
我想得到最后一个“/”后面的所有内容(在本例中是字符串“baz”)


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

SQLite核心函数的表达能力是有限的。对于已知最大数量的
/
字符,这可以通过一系列嵌套的
substr()
instr()
调用来完成,一次将字符串的一部分删除到下一个
/
,但这并不太优雅

你真的应该用你的编程语言来做

select replace(str, rtrim(str, replace(str, '/', '')), '') from table;
逐步解释。例如,我们有以下字符串:

/storage/udisk/1200 Mics/[2002]1200微克/1200 Mics-03-Mescaline.mp3

replace(str,“/”,“)
从str中删除
/
字符,因此我们将有:

storageudisk1200话筒[2002]1200微克1200话筒-06-摇头丸.mp3

让我们称之为noslashes
noslashes
。接下来我们使用
(str,noslashes)
,它将从右侧开始删除出现在
noslashes
中的所有字符。由于
noslashes
包含字符串中除
/
以外的所有内容,因此将从右侧进行修剪,直到找到
/
字符。这样我们就找到了我们的父目录:

/storage/udisk/1200麦克风/[2002]1200微克/

现在,我们使用
replace
从文件路径中删除父路径名,我们只有文件名


1200麦克风-03-Mescaline.mp3
解决方案是将代码中出现的所有
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

请编辑更多信息。不鼓励只编写代码和“试试这个”答案,因为它们不包含可搜索的内容,也不解释为什么有人应该“试试这个”。我们努力成为知识的来源。我希望补充的解释能帮助你。这是一个非常聪明的答案@真是太棒了!如果将
'/'
更改为
'\'
,则可以仅将Windows FullFileName拆分为文件名。如果切掉第一个
替换(str,
和结尾
,“”)
你得到的路径没有文件名。我希望我能多次投票!你的回答真的节省了我很多时间。你注意到sqlite标签了吗?是的。这就是为什么这是有效且经过测试的SQLiteSQL@Knickerless-除了SQLite之外,Noggins没有CHARINDEX或REVERSE函数。