SQLite:如何只选择没有扩展名的文件名?

时间:2014-11-11 10:11:00

标签: sqlite

我需要从我的一个表中提取没有扩展名的文件名。

目前我使用过

SELECT filename FROM files     
使用

返回整个文件名(Jessica.Timber.mp3)。那么是否可以使用sqlite获取文件名(例如:Jessica.Timber)?这些文件可能包含多个"。"但是应该删除只有最后一个点后面的分机。

我尝试了以下查询,如果扩展名只有3个字母长(例如:* .mp3),则会提供结果,但如果超过该字母,则会失败(例如:* .flac)

SELECT substr(filename, -4, -100) from files;    

2 个答案:

答案 0 :(得分:3)

以下是查询 - 无论扩展名长度如何,都可以获得没有扩展名的文件名。文件名可以包含任意数量的.字符(经过测试和验证)

select replace(filename
             , '.' || replace(filename
                            , rtrim(filename, replace(filename, '.', '') )
                            , '')
             , '')
  from files;

测试:

create table files (filename);
insert into files values ("ph.otoJpg.jpg"), ("ph.otoJpeg.jpeg");

然后上面的代码产生:

ph.otoJpg.
ph.otoJpeg.

答案 1 :(得分:0)

SQLite没有built-in string functions可以帮助解决这个问题。

可以创建递归CTE,但最简单的方法是检索整个文件名并删除代码中的扩展名。